r - R-比较组中跨多列的行
问题描述
我有一个数据框,其中包含样本(按行)及其在多列中的值。在某些情况下,样本已重复。我想要做的是比较这些重复列中的值并将输出放入新的df中。如果值匹配,我想用 1 表示这一点,如果它们不匹配 0。NA 应该导致 NA。
我尝试做的类似于这里。但是,我只想比较重复的样本,而不是像链接中的示例那样比较所有行的所有组合。但是我找不到将那里给出的解决方案转换为我的问题的方法。
示例数据:
Sample x.1 x.2 y.1 y.2 z.1 z.2
------------------------------------
ID1 66 66 102 104 33 37
ID2 66 72 100 104 31 35
ID2 66 72 100 104 NA NA
ID3 64 66 104 104 35 37
ID4 72 72 100 102 31 37
ID4 72 72 NA NA 31 37
ID4 72 72 100 102 31 31
ID5 66 66 102 102 35 35
ID5 66 72 100 100 31 37
结果我在一个新的df中寻找:
Sample x.1 x.2 y.1 y.2 z.1 z.2
------------------------------------
ID2 1 1 1 1 NA NA
ID4 1 1 NA NA 1 0
ID5 1 0 0 0 0 0
我按照这些思路尝试了一些方法,但它不起作用,因为它只给我 1 作为输出,所以这绝对是不正确的。
test <- df %>%
group_by(Sample) %>%
mutate(across(1:6, funs(ifelse(.[1,]==.[2,], 1, 0))))
解决方案
您可以先删除每个组中只有 1 行的组,然后summarise
按组删除其余列。
library(dplyr)
df %>%
group_by(Sample) %>%
filter(n() > 1) %>%
summarise(across(x.1:z.2,
~if(any(is.na(.))) NA else as.integer(n_distinct(.) == 1)))
# Sample x.1 x.2 y.1 y.2 z.1 z.2
# <chr> <int> <int> <int> <int> <int> <int>
#1 ID2 1 1 1 1 NA NA
#2 ID4 1 1 NA NA 1 0
#3 ID5 1 0 0 0 0 0
推荐阅读
- android - 为什么运行应用程序后绑定服务中的公共变量会发生变化?
- c++ - 当父类被删除时,方法局部的静态变量会发生什么?
- php - php表单没有将数据插入mysql数据库,虽然没有连接错误
- java - 如何在 RazorPay 中获取创建的 orderID?
- excel - 在插入行时动态扩展范围
- java - 是否可以返回数据集而不是 MyBatis 中的任何映射模型类?
- reactjs - 多次反应浅比较工作?
- python - 如何修复 # 问题 400 指定 FLAC 编码以匹配文件头?
- angular - 当我输入超过 3 个字符时如何过滤数据
- xml - What happens when I declare beans and component-scan both in applicationContext.xml?