nak*_*120 2 if-statement r 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 source6 source3
C source7 source4
Run Code Online (Sandbox Code Playgroud)
我想看看"Source_Match"中的值是否存在于每个"Target"的"Source"列表中.
最终结果应如下所示:
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
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒,谢谢!
dplyrish的方式是:
library(dplyr)
DF %>% group_by(Target) %>% mutate(found = Source_Match %in% Source)
Run Code Online (Sandbox Code Playgroud)
类似的data.table代码是
library(data.table)
setDT(DF)
DF[, found := Source_Match %in% Source, by=Target]
Run Code Online (Sandbox Code Playgroud)
如果"source"列是字符类型,%chin%则可以代替使用%in%.它是data.table包中专用于此案例的更快版本.(谢谢,@ karun.)
还有另一个想法,来自@ eddi的评论:
更快?替代方案:
Run Code Online (Sandbox Code Playgroud)DF[, found := 'No'][DF, on = .(Target, Source_Match = Source), found := 'Yes']
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |