Q:

Averaging common columns from two data.frames with common words from 1st column into third data.frame

I have two data sets. Both each contains a larger portion of data about 1 million rows by 300 columns for the real data set. I want to merge the two data sets together by the common words they have in them. In addition, I would like to average together each cell that corresponds to the columns and common words and make a third data.frame. I have some example data below.
This is the first data set. It is smaller...
set.seed(511111)     
 #first data.frame with a smaller datasset
 df<-matrix(data=rnorm(n=300,mean=10,sd=300),nrow=6,ncol=2)
   words<-c("a","by","the","hi","bye","see")
   df<-cbind(words,df);colnames(df)=c("y",paste0("V",c(1:2)))
   df

          y     V1                  V2                 
[1,] "a"   "158.979716349289"  "-16.2574951855564"
[2,] "by"  "164.995114380192"  "-68.1726437428752"
[3,] "the" "720.223066121601"  "1054.04351778352" 
[4,] "hi"  "-288.629142240942" "537.900385284324" 
[5,] "bye" "-581.097490056299" "183.495782507513" 
[6,] "see" "-192.129441997881" "-117.187652711745"

This is the second data.set. it is larger
 #second data.frame with a larger dataset
 df2<-matrix(data=rnorm(n=300,mean=0,sd=1),nrow=10,ncol=2)
   words2<-c("a","when","by","hi","was","bye","see","how","where","went")
   df2<-cbind(words2,df2);colnames(df2)=c("y",paste0("V",c(1:2)))
   df2

          y       V1                    V2                  
 [1,] "a"     "2.55623583381151"    "0.686246827197614" 
 [2,] "when"  "-2.19232079339484"   "-0.620807684132454"
 [3,] "by"    "-0.310318599027961"  "-0.456190746859373"
 [4,] "hi"    "-0.0166971880962356" "1.21756976500452"  
 [5,] "was"   "1.27945031935845"    "-1.56033115877046" 
 [6,] "bye"   "0.169979040969853"   "0.19817006675571"  
 [7,] "see"   "2.2791761351847"     "-0.284258324796253"
 [8,] "how"   "1.92863014151405"    "-1.27270442280769" 
 [9,] "where" "-1.29927355911528"   "-1.45698273893523" 
[10,] "went"  "0.154918778937943"   "-2.03576369295626" 

Here are the common words from df and df2...
 #common words in df and df2 are
   common.words<-c("a","by","hi","bye","see")

   common.words
[1] "a"   "by"  "hi"  "bye" "see"

I want the third data set to look like this data set. So I will take the average of each column per common word. So for column V1 = (df[1,2] and df2[1,2]) for word =  "a" and put that in df3. I will be doing this for about 20,000 or so common words in the real data set I have. For words that don't match in either dataset, I would like to throw those words away, have them as NA values, or include their values without a mean from each dataset so it would be a mixture of averaged common words + unique words from df and df2. Whichever is easier...
 #what I want the dataset to look like after its finished merging and averaging columns V1 and V2 for common words

For the first value -200.365, was calculated by taking the average of df[1,2] (-399.988526255518) and df2[1,2] ("-1.47232443999644"), the common word for this line was "a". 
For the second value 8.64, was calculated by taking the average of df[1,3] (16.9236076090913) and df2[1,3] ("-0.520509732658999"), the common word for this line was "a". 
 numbers<-data.frame(V1=c("-200.365","121.227","91.187","29.125","100.76"),
+                     V2=c("8.64","80.558","-138.89","68.11","86.454"))
 df3<-cbind(common.words,numbers)
 df3

  common.words         V1      V2
1 a       80.8   -7.79
2 by      82.3  -34.3 
3 bye   -290.    91.8 
4 hi    -144.   270.  
5 see    -94.9  -58.7 

I added your solution as an answer to this problem...
df <- data.frame(df)
 df2 <- data.frame(df2)
 library(dplyr)
 #df.list=list(df,df2)
 df3<-bind_rows(df,df2) %>%
+   mutate_at(vars(starts_with("V")), as.numeric) %>%
+   filter(y %in% common.words) %>%
+   group_by(y) %>%
+   summarise_all(mean)
Warning messages:
1: In bind_rows_(x, .id) : Unequal factor levels: coercing to character
2: In bind_rows_(x, .id) :
  binding character and factor vector, coercing into character vector
3: In bind_rows_(x, .id) :
  binding character and factor vector, coercing into character vector
4: In bind_rows_(x, .id) : Unequal factor levels: coercing to character
5: In bind_rows_(x, .id) :
  binding character and factor vector, coercing into character vector
6: In bind_rows_(x, .id) :
  binding character and factor vector, coercing into character vector
7: In bind_rows_(x, .id) : Unequal factor levels: coercing to character
8: In bind_rows_(x, .id) :
  binding character and factor vector, coercing into character vector
9: In bind_rows_(x, .id) :
  binding character and factor vector, coercing into character vector
> df3
# A tibble: 5 x 3
  y         V1      V2
  <chr>  <dbl>   <dbl>
1 a       80.8   -7.79
2 by      82.3  -34.3 
3 bye   -290.    91.8 
4 hi    -144.   270.  
5 see    -94.9  -58.7 

A:

Bind rows together of both the dataframes, convert to numeric, filter only common.words, group_by y and calculate mean.
library(dplyr)

bind_rows(df, df2) %>%
    mutate_at(vars(starts_with("V")), as.numeric) %>%
    filter(y %in% common.words) %>%
    group_by(y) %>%
    summarise_all(mean)

We can use the same logic to use base R aggregate
#rbind both the datasets
df1 <- rbind(df, df2)
#Convert factor numbers to numeric
df1[2:3] <- lapply(df1[2:3], function(x) as.numeric(as.character(x)))
#Filter and aggregate
aggregate(.~y, df1[df1$y %in% common.words, ], mean)

data
df <- data.frame(df)
df2 <- data.frame(df2)

