我需要在
df1
中创建一个名为 col_2
的新列,并从另一个数据框 (df2
) 为其分配值。当col_1
中的df1
中的值等于col_a
中的df2
中的值时,我希望将col_b
的df2
的相应值分配给col_2
。
数据框大小不同。
数据:
col_1 <- c(23,31,98,76,47,65,23,76,3,47)
col_2 <- NA
df1 <- data.frame(col_1, col_2)
col_a <- c(1:100)
col_b <- c(runif(100,0,1))
df2 <- data.frame(col_a, col_b)
我尝试了以下方法,但似乎都不起作用...我一直遇到同样的问题,数据帧的长度不同。
for (i in 1:10){
if(df1$col_1[i] == df2$col_a[]){
df1$col_2[i] == df2$col_b[]
}
}
df1$col_2 <- ifelse(df2$col_a %in% df1$col_1, df2$col_b, NA)
df1$col_1[df1$col_1 %in% df2$col_a] <- df2$col_b[df1$col_1 %in% df2$col_a]
我们可以使用
left_join
library(dplyr)
left_join(df1, df2, by = c('col_1' = 'col_a'))
这里还可以使用合并功能。如果 df 中有很多列,则它会更有用,因为当您需要保留所有数据而不仅仅是合并的数据时,可以设置 all.x = True :
df1 <- merge(df1, df2, by.x = "col_1", by.y = "col_a", all.x = TRUE)