将同一列中的每个元素与R中的其他记录集进行比较

时间:2018-10-26 13:13:44

标签: r

enter image description here

我有一个数据表,其中需要根据两种不同类型的同一列中元素与元素之间的比较/匹配来填充Result列。 在这里,我们需要在对象1和对象2之间而不是列与列之间逐一比较同一列中的值。

如果您可以看到第一行的结果值,我已经提到1,0,1表示对象1的Col-1中的匹配对象2的Col-1中。同样,col-2为0,col-3为1。

R 中带有或不带有 package

的任何解决方案

1 个答案:

答案 0 :(得分:0)

不确定我能很好地理解你的问题。而且不知道Type和column值的数量限制是什么,这是tidyverse的一般解决方案:

# Your data (there seems to be a problem on line3 result)
df <- read.table(text=
"Type Col1 Col2 Col3 Result
O1 A B F 1,0,1
O1 B D S 0,1,0
O1 C F R 0,0,0
O1 D D D 1,1,1
O2 A F F 1,0,1
O2 D D D 1,1,1",header=TRUE,stringsAsFactors=FALSE)

df %>% select(-Result) %>% mutate(id=row_number()) -> df1
df1 %>% gather(k,v,-Type,-id) -> df2
crossing(df2,df2) %>%
   filter((Type!=Type1)&(k==k1)) %>%
   mutate(z=as.integer(v==v1)) %>%
   group_by(id,id1,k) %>%
   arrange(desc(z)) %>% filter(row_number()==1) %>%
   group_by(id,id1) %>% arrange(k) %>%
   summarise(n=sum(z),z=paste(z,collapse=","))%>%
   filter(n>=max(n)) %>%
   select(-id1,-n) %>%
   inner_join(df1,.,by="id")
#  Type Col1 Col2 Col3 id     z
#1   O1    A    B    F  1 1,0,1
#2   O1    B    D    S  2 0,1,0
#3   O1    C    F    R  3 0,1,0
#4   O1    D    D    D  4 1,1,1
#5   O2    A    F    F  5 1,0,1
#6   O2    D    D    D  6 1,1,1