R 按ID查看另一列中是否存在一个值
数据帧如下所示:R 按ID查看另一列中是否存在一个值,r,if-statement,dplyr,R,If Statement,Dplyr,数据帧如下所示: Target Source Source_Match A source1 source2 A source2 source4 A source3 source1 B source1 source2 B source3 source4 B source4 source5 C source5 source2 C sour
Target Source Source_Match
A source1 source2
A source2 source4
A source3 source1
B source1 source2
B source3 source4
B source4 source5
C source5 source2
C source6 source3
C source7 source4
我想看看每个“目标”的“源”列表中是否存在“源匹配”中的值
最终结果应如下所示:
Target Source Source_Match Found In Target?
A source1 source2 Yes
A source2 source4 No
A source3 source1 Yes
B source1 source2 No
B source3 source4 Yes
B source4 source5 No
C source5 source2 No
C source6 source3 No
C source7 source4 No
任何帮助都会很好,谢谢 dplyrish的方式是:
library(dplyr)
DF %>% group_by(Target) %>% mutate(found = Source_Match %in% Source)
类似的data.table代码是
library(data.table)
setDT(DF)
DF[, found := Source_Match %in% Source, by=Target]
如果“源”列为字符类型,则可以使用%chin%
代替%中的%。data.table包中提供了专门针对这种情况的更快版本。(谢谢,@akrun。)
另一个想法来自@eddi's:
快一点?备选方案:
DF[, found := 'No'][DF, on = .(Target, Source_Match = Source), found := 'Yes']
使用基本包。我相信有很多更有效的方法可以使用基本包来实现这一点
df1 <- df[, c(1,2)]
df2 <- df[, c(1,3)]
colnames(df2) <- colnames(df1)
df$found <- duplicated(rbind(df1,df2))[(nrow(df)+1):(nrow(df)*2)]
我看不到模式,您能进一步解释一下吗?我无法安装包:data。frame@Nick对不起,我没想清楚。应该在那里写dplyr而不是data.frame。修好了,谢谢!所以第一部分对我不起作用,但第二部分起作用。谢谢快一点?备选方案:DF[,发现:='No'][DF,on=(目标,源匹配=源),发现:='Yes']
Target Source Source_Match found
1 A source1 source2 TRUE
2 A source2 source4 FALSE
3 A source3 source1 TRUE
4 B source1 source2 FALSE
5 B source3 source4 TRUE
6 B source4 source5 FALSE
7 C source5 source2 FALSE
8 C source6 source3 FALSE
9 C source7 source4 FALSE