【发布时间】:2019-06-21 18:44:38
【问题描述】:
是的,非常简单的问题即将让我陷入困境,因为我知道有一种合乎逻辑的方法。我有两个数据帧,并希望在第一个数据帧 0/1 中创建一个新列,具体取决于第二个数据帧中的任何行是否包含来自第一个数据帧的 col1/col2 对。
数据
df.ex1 <- data.frame('name'=c('sally', 'joe', 'ben', 'nick'), 'grade1'=c('A', 'B', 'F', 'A'))
df.ex2 <- data.frame('name'=c('jed', 'ben', 'sally', 'nick'), 'grade1'=c('A', 'F', 'A', 'C'))
> df.ex1
name grade1
1 sally A
2 joe B
3 ben F
4 nick A
> df.ex2
name grade1
1 jed A
2 ben F
3 sally A
4 nick C
#Expected result:
name grade1 bin
1 sally A 1
2 joe B 0
3 ben F 1
4 nick A 0
显而易见的方法是检查第二个 df 中是否存在名称等级对:
df.ex1$bin <- ifelse(df.ex1[,1:2] %in% df.ex2[,1:2], 1, 0)
但这不起作用。为什么不?什么是正确的方法?实际上,得出正确方法的正确思维过程是什么?
注意,这显然行不通:
df.ex1$bin <- ifelse(df.ex1[,1] %in% df.ex2[,1] & df.ex1[,2] %in% df.ex2[,2], 1, 0)
【问题讨论】:
-
这对于
ifelse来说太复杂了,因为您不只是检查来自df1的特定name和grade1是否在df2中。您正在检查name和grade1值是否在df2在同一行中。
标签: r if-statement