请考虑以下数据帧:
[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
它抛出一个错误并且没有产生期望的结果。 如何获得最终的数据帧?
答案 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