r - 将同一列中的每个元素与 R 中的其他记录集进行比较
问题描述
我有数据表,其中需要根据来自两种不同类型的同一列中的元素到元素之间的比较/匹配来填充 Result 列。在这里,我们需要在对象 1 和对象 2 之间一一比较同一列中的值,而不是逐列比较。
如果您可以看到第一行的结果值,我已经提到了 1,0,1 表示 Object-1 的 Col-1 中与 Object-2 的 Col-1 匹配。类似地,col-2 为 0,col-3 为 1。
欣赏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
推荐阅读
- angular - Angular 6 从另一个组件接收输入以进行 Karma 单元测试
- java - Spring Boot/JUnit - 没有可用的“布尔”类型的合格 bean
- python - 如何告诉 POpen 使用/设置某些环境变量?
- python - exec定义了什么,如何处理?
- node.js - 如何将 jhipster 应用程序生成到不同的目录中?
- c# - 使用正文和不记名令牌执行 put 方法
- node.js - 将 nodejs 从 CI 服务器部署到生产环境
- java - Gradle 不执行测试
- r - 如何基于 2 列在 R 上合并 2 个数据框?
- rabbitmq - Spring AMQP DirectContainer 不断重新排队出现错误