2015-11-01 61 views
0

使用R的新手,並想知道如何根據來自另一個數據幀的數據在數據框中創建新列。假設我有2個數據幀,由字母「a」相連,在df1col2「B」和「C」和df2col1如下:r語言:如何基於另一個數據框在數據框中創建新列?

> col1<-c(1, 2, 3, 4) 
> col2<-c("a","b","c","c") 
> df1<-data.frame(col1, col2) 
> df1 
    col1 col2 
1 1 a 
2 2 b 
3 3 c 
4 4 c 
> c1<-c("a","b","c") 
> c2<-c("Jim","Sue","Bob") 
> c3<-c("abc","def","ghi") 
> df2<-data.frame(c1,c2,c3) 
> df2 
    c1 c2 c3 
1 a Jim abc 
2 b Sue def 
3 c Bob ghi 

我想一個欄3添加到df1添加用戶名基於df1中的「a」,「b」或「c」的值。也就是說,我如何使用R獲得以下內容?

> df1 
    col1 col2 col3 
1 1 a Jim 
2 2 b Sue 
3 3 c Bob 
4 4 c Bob 

我試過df1["col3"]<-df2[df1$col2==df2$c1]$c2但它不工作。

注意:我只想添加一列從df2df,如上所示(例如,不是所有的列在df2)。

+2

看看合併或匹配。我喜歡'dplyr'中的'left_join'。爲了完整性,它只是'合併(df1,df2,by.x =「col2」,by.y =「c1」)' – jenesaisquoi

回答

1

您需要合併()。

# this merges the two data frames and rebinds the result to df1 
df1 <- merge(df1, df2, by.x = "col2", by.y = "c1") 
# This renames the "c1" column to "col3" 
names(df1) <- c("col2", "col1", "col3") 
# This rearranges the columns in the right order 
df1 <- df1[,c(2,1,3)] 

結果是:

col1 col2 col3 
1 1 a Jim 
2 2 b Sue 
3 3 c Bob 
4 4 c Bob 

類型合併,看看它是如何工作的。

+0

謝謝@kliron,這顯然合併了所有列在'df2' ...如何只合併'df2'中的指定列'c2'? – user46688

+0

你是什麼意思?這正是你想要的問題的輸出。如果你在df2中不需要更多的列(你沒有在你的問題中顯示),只需要保留df2的子集,只保留你想要的列,然後將該數據幀合併到df1中。 – kliron

+0

你也可以將得到的df1進行子集化,甚至通過將它們設置爲NULL來刪除單個列,如下所示:df1 $ unwantedColumn < - NULL – kliron

1
> merge(df1, df2, by.x = "col2", by.y = "c1") 
    col2 col1 c2 
1 a 1 Jim 
2 b 2 Sue 
3 c 3 Bob 
4 c 4 Bob 
+0

只有'c2'被添加n這個答案(與你的匹配,除了'c2'的列名被稱爲'col3 '在你的問題中,你可以用'names(result)[3] < - 「col3」'改變它。 –

相關問題