我有两个数据帧,df1和df2,其中两列具有部分匹配的值,但是顺序完全不同;此外,这些值在df2中是唯一的,但可以在df1中重复。 我想要做的是转移到df1,而不是匹配的值,而是转移到df2中另一个变量中与它们相关的值;对于df1中的一个值," G",我不希望转移相关值,而只是转移NA。
考虑df1和df2:
df1 <- data.frame(
x = c("A", NA, "L", "G", "C", "F", NA, "J", "G", "K")
)
df2 <- data.frame(
a = LETTERS[1:10],
b = 1:10 # these are the values to be transferred into df1$z
)
df1$z <- ifelse(df1$x=="G", NA, ifelse(df1$x %in% df2$a, df2$b[df2$a %in% df1$x], NA))
从df2传输到df1的值在df2 $ b中。我已经尝试了上面的ifelse()字符串,但是df1 $ z中的结果值只是部分正确。哪里出错?
答案 0 :(得分:0)
我认为这可以满足您的需求:
df1$z <- df2$b[match(df1$x,df2$a)]
df1$z[df1$x=='G']=NA
输出:
> df1
x z
1 A 1
2 <NA> NA
3 L NA
4 G 7
5 C 3
6 F 6
7 <NA> NA
8 J 10
9 G 7
10 K NA
希望这有帮助!
答案 1 :(得分:0)
dplyr::left_join(df1,df2,by=c("x"="a")) %>% mutate(b = ifelse(x=="G",NA,b))
# x b
# 1 A 1
# 2 <NA> NA
# 3 L NA
# 4 G NA
# 5 C 3
# 6 F 6
# 7 <NA> NA
# 8 J 10
# 9 G NA
# 10 K NA