如何用R语言统计数据框每行中值大于100的列的出现频次?
问题原因及解决方法
你的代码错误在于c(8:52>100)这部分——它是在判断数字8到52是否大于100,这些数字最大仅为52,全部满足FALSE,所以求和结果必然是0,完全没有读取数据框里的实际行值。
正确解法1:保留rowwise()逻辑
使用c_across()来获取每行指定列范围(第8到52列)的数值,再统计大于100的频次:
df %>% rowwise() %>% mutate(foo = sum(c_across(8:52) > 100, na.rm = TRUE))
正确解法2:矢量化计算(更高效,适合大数据集)
对于几千行的数据集,rowwise()效率较低,推荐用rowSums()直接做矢量化运算:
df %>% mutate(foo = rowSums(select(., 8:52) > 100, na.rm = TRUE))
select(., 8:52)选取第8到52列,>100将列内数值转为逻辑矩阵(TRUE=1,FALSE=0),rowSums()直接对每行求和得到频次。
验证结果
以你提供的数据集为例:
- 第1行的
S026463.R1=153、S026477.R1=780,所以foo应为2 - 第5行的
S026428.R1=1049,所以foo应为1
内容的提问来源于stack exchange,提问作者sscoresby
相关产品推荐
相关产品推荐

