r - 根据组内的所有列是否匹配特定值来汇总列组

标签 r

我有一个数据框,其中包含以相同字母开头的列组(例如 AA、AB、AC 等)。我需要生成一个摘要,计算每个列组中的所有列都匹配特定值(例如 1)的行数。

如果这是我的数据框 (df)

  AA_1 AA_2 AB_1 AB_2 AB_3 AC_1 AC_2
1    1    1    0    1    1    0    1
2    1    1    0    0    0    1    0
3    1    0    1    1    1    0    0

我需要这样的总结:

AA    2    
AB    1      
AC    0    

我可以通过使用 sapply 和数据框中的唯一列名列表来检索分组的行总和:

 groups <- unique(substr(names(df), 1, 2))
 sapply(groups, function(xx) rowSums(df[,grep(xx, names(df)), drop=FALSE]))

输出:

     AA AB AC
[1,]  1  2  1
[2,]  2  0  1
[3,]  2  3  0

但不太清楚如何修改它以有条件地总结

最佳答案

您可以在 base R 中一步完成它:

do.call(rbind, lapply(split.default(df, sub("([[:alpha:]]+)_\\d+", "\\1", names(df))), 
                      \(x) {sum(apply(x, 1, \(x) all(x == 1)))}))

   [,1]
AA    2
AB    1
AC    0

关于r - 根据组内的所有列是否匹配特定值来汇总列组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69087613/

相关文章:

r - 合并列表的同一列表中的行

r - 如何在ggplot2中抖动线条

html - 更改标题样式可格式化 R

r - 如何用第一个解决方案初始化第二个手套模型?

r - 多项式的卷积返回意外值

r - 如何使用 ggplot2 在一行中添加多个线条样式?

r - 如何让 aov 向我显示 F 统计量和 p 值?

r - 计算变化率

r - 每个框中带有标签的马赛克图,显示所有观察值的名称和百分比

r - 从列表中的 data.frame 中快速查找具有匹配元素名称的值