R从具有条件的csv文件中查找输出

时间:2016-12-09 10:56:58

标签: r

我有一个名为input.csv的文件,如下所示:

ID  AVal    BVal    CVAL
ABC 1137169 386321  as
BCD 567314  95504   abc
BCD 567314  890 bcd
BCD 567315  15000   abc
BCD 567314  15000   abc
XYZ 366628  1093668 abc
XYZ 12  1093668 abc
XYZ 139 123 abc

条件:

如果ID =相同则     检查相应的A值和B值     如果A值为==该行的值或B值==该行的B值

Take the matching row and put it in the output file.

例如。 ID的第一个ID值是“ABC”,因为ABC不在ID列的任何位置,跳过它。 第二个值是“BCD”,如果我们遍历列表,我们会发现第三行的id为“BCD”     检查第2行的Aval,第3行的Aval或第2行的Bval,第3行的Bval,因为它们匹配,我们选择行。         BCD == BCD             if((567314 == 567314)OR(95504 == 890)                 选择“BCD 567314 890 bcd”并将其粘贴在输出文件中。

输出如下:

输出:

ID  AVal    BVal    CVAL
BCD 567314  890 bcd
BCD 567314  15000   abc
XYZ 12  1093668 abc

1 个答案:

答案 0 :(得分:0)

使用dplyr::group_bybase::duplicated,针对每个ID检查AVal OR BVal

中的重复项
#replace below path with complete path of input.csv

DF = read.csv("full/path/to/input.csv",header=TRUE,stringsAsFactors=FALSE)

library(dplyr)
subDF = 
DF %>% 
group_by(ID)  %>% 
filter(duplicated(AVal)|duplicated(BVal)) %>% 
as.data.frame()

subDF
#      ID   AVal    BVal CVAL
#1 BCD 567314     890  bcd
#2 BCD 567314   15000  abc
#3 XYZ     12 1093668  abc

#write to output file
write.csv(subDF,"output.csv")