如何在R中使用不同dims的两列ifelse()?

时间:2017-01-05 13:34:29

标签: r

我有两个数据帧:

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 $ Item因子并将其分配给df2 $ Freq,但是正如您所看到的,只有第一个项目填入df2中的每个项目,其余部分变为NA。 我试过的代码:

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

有没有办法告诉函数我想要所有匹配在df2中的项目?或者是否有其他功能可以实现这一目标? 感谢。

1 个答案:

答案 0 :(得分: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