R:根据条件(不同大小的数据帧)从另一个数据帧的列中将值分配给列

问题描述 投票:0回答:2

我需要在

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]
r dataframe conditional-statements
2个回答
0
投票

我们可以使用

left_join

library(dplyr)
left_join(df1, df2, by = c('col_1' = 'col_a'))

0
投票

这里还可以使用合并功能。如果 df 中有很多列,则它会更有用,因为当您需要保留所有数据而不仅仅是合并的数据时,可以设置 all.x = True :

df1 <- merge(df1, df2, by.x = "col_1", by.y = "col_a", all.x = TRUE)
© www.soinside.com 2019 - 2024. All rights reserved.