R:用不同大小数据框的值填充数据框的列
考虑以下数据帧:R:用不同大小数据框的值填充数据框的列,r,conditional-statements,R,Conditional Statements,考虑以下数据帧: 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
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[which(dat$z == df$y)] <- df$x[which(df$y == dat$z)]
dat$group[which(dat$z %in% df$y)] <- df$x[which(df$y %in% dat$z)]
dat$group[which(dat$z==df$y)]您试图做的是一个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
dplyr::left_join(dat,df,by=c('z'='y'))
z组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贾夫纳A
8 zfw NA
9 zfw NA
10 zfw NA
11厚钠碳纤维
将有几种不同的策略,但我认为了解这种操作的适当术语会有所帮助。您试图做的是加入操作:
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
dplyr::left_join(dat,df,by=c('z'='y'))
z组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贾夫纳A
8 zfw NA
9 zfw NA
10 zfw NA
11厚钠碳纤维
将有几种不同的策略,但我认为了解这种操作的适当术语会有所帮助。一个简单的R基解决方案是使用匹配:
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
dat$group一个简单的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
dat$组的可能重复项的可能重复项