首页 > 解决方案 > 将同一列中的每个元素与 R 中的其他记录集进行比较

问题描述

在此处输入图像描述

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

如果您可以看到第一行的结果值,我已经提到了 1,0,1 表示 Object-1 的 Col-1 中与 Object-2 的 Col-1 匹配。类似地,col-2 为 0,col-3 为 1。

欣赏R中带包或不带包的任何解决方案

标签: r

解决方案


不确定我是否理解您的问题。并且不知道 Type 和列的值数量的限制是什么,这是 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

推荐阅读