【发布时间】:2020-10-12 16:24:50
【问题描述】:
我有两个像这样的 df,
id1<-c(2,2,2,1,3)
id2<-c(4,4,5,2,3)
OS<-c(1,2,3,4,5)
a <- cbind(OS, id1, id2)
a
i1<-c(2,2,2,4,3)
i2<-c(4,4,5,2,3)
OSi<-c(1,2,3,4,5)
b <- cbind(OSi, i1, i2)
我想创建一个带有“0”的新 col (x),其中 a$OS 和 a$OSi 匹配(即 1->1、2->2)但仅在每个 df 中的后续两个 cols 是同意,而他们不同意的地方是“1”。 我想要的输出是这样的:
id1<-c(2,2,2,1,3)
id2<-c(4,4,5,2,3)
OS<-c(1,2,3,4,5)
x <-c(0,0,0,1,0)
a <- cbind(OS, id1, id2, x)
a
到目前为止,我已经尝试过:
a$x <- case_when(a$OS %in% b$OSi &
a$id1 %in% b$I1 &
b$id2 %in% b$I2 ~ '0') %>%
replace_na('1')
但是,我发现 Case_when 只是看起来满足这里的第一个参数。 (即 0/1 的比率根据变量的顺序而变化)。
另外,上面是一个顶级df。我的实际数据约为 10000 行,b 比 a 长。我可能还想删除不在 a 中但在 b 中的任何行。
我希望这已经足够清楚了。 Dplyr 我更喜欢集成到管道中!
干杯!
【问题讨论】: