我有一个数据框,其中包含以相同字母开头的列组(例如 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/