R:用不同大小的数据框的值填充数据框的列

时间:2019-01-15 16:58:07

标签: r conditional-statements

请考虑以下数据帧:

[TABLESPACE]

我希望df <- data.frame(x = c("A", "A", "A", "B", "C", "C"), y = c("abl", "rtg", "jaf", "rlt", "thk", "lpv")) z = c(rep("abl", 4), rep("rtg", 2), rep("jaf",1), rep("zfw", 3), "thk") dat <- data.frame(z = z, group = rep(NA, length(z))) 用该行中的dat$group的值填充,其中df$x的值与df$y匹配。最终的数据帧应如下所示:

dat$z

我只是不知道该怎么做。

到目前为止我尝试过的代码:

 z group
abl     A
abl     A
abl     A
abl     A
rtg     A
rtg     A
jaf     A
zfw    NA
zfw    NA
zfw    NA
thk     C

它抛出一个错误并且没有产生期望的结果。 如何获得最终的数据帧?

2 个答案:

答案 0 :(得分:1)

您要执行的是join操作:

dplyr::left_join(dat, df, by = c('z' = 'y'))

     z group    x
1  abl    NA    A
2  abl    NA    A
3  abl    NA    A
4  abl    NA    A
5  rtg    NA    A
6  rtg    NA    A
7  jaf    NA    A
8  zfw    NA <NA>
9  zfw    NA <NA>
10 zfw    NA <NA>
11 thk    NA    C

linked duplicate将有几种不同的策略,但是我认为了解此类操作的合适术语会有所帮助。

答案 1 :(得分:1)

一个简单的R基础解决方案是使用match

dat$group <- df$x[match(dat$z,df$y)]
dat
     z group
1  abl     A
2  abl     A
3  abl     A
4  abl     A
5  rtg     A
6  rtg     A
7  jaf     A
8  zfw  <NA>
9  zfw  <NA>
10 zfw  <NA>
11 thk     C