2017-01-05 30 views
0

我有兩個dataframes:如何使用ifelse()在R中具有不同dims的兩列?

dim(df1) = 70, 2 
Item Freq 
Q1 1 
Q12 2 
Q26 3 

dim(df2) = 3780 , 2 
Item Freq 
Q1   1 
Q1  NA 
Q1  NA 
Q1  NA 
Q1  NA 
Q1  NA 

使用ifelse功能,我試圖採取DF1 $項目的因素並將其分配給DF2 $頻率,但是你可以看到,只有第一項是人口對於df2中的每個項目,其餘的項目都是NA。 代碼我想:

df2$Freq <- ifelse(df1$Item == df2$Item, df1$Freq, df1$Freq)

有沒有辦法來告訴我想要的匹配DF2填寫所有項目的功能?還是有另一個功能可以實現這個功能? 謝謝。

+5

也許'DF2 $頻率< - DF1 $頻率[匹配(DF2 $項目,DF1 $項目)]' – mtoto

+0

@mtoto這是工廠,謝謝:) –

回答

0

另一種選擇是(使用包dplyr):

library(dplyr) 

df1 <- structure(list(Item = c("Q1", "Q2", "Q3"), 
         Freq = c(1, 3, 8)), 
       .Names = c("Item", "Freq"), 
       row.names = c(NA, -3L), 
       class = "data.frame") 


df2 <- structure(list(Item = c("Q1", "Q1", "Q1", "Q1", "Q1", "Q1", "Q1", 
           "Q2", "Q2", "Q2", "Q2", "Q2", "Q3"), 
         Freq = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA)), 
       .Names = c("Item", "Freq"), 
       row.names = c(NA, -13L), 
       class = "data.frame") 

df2 

Item Freq 
1 Q1 NA 
2 Q1 NA 
3 Q1 NA 
4 Q1 NA 
5 Q1 NA 
6 Q1 NA 
7 Q1 NA 
8 Q2 NA 
9 Q2 NA 
10 Q2 NA 
11 Q2 NA 
12 Q2 NA 
13 Q3 NA 

df3 <- left_join(select(df2,Item), 
       df1, 
       by="Item") 
df3 

Item Freq 
1 Q1 1 
2 Q1 1 
3 Q1 1 
4 Q1 1 
5 Q1 1 
6 Q1 1 
7 Q1 1 
8 Q2 3 
9 Q2 3 
10 Q2 3 
11 Q2 3 
12 Q2 3 
13 Q3 8 
+0

這也適用!非常感謝! –

相關問題