You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用dpplyr更简洁地按行统计指定列中'-999'的数量?

更简洁的实现方式(使用rowSums)

直接利用rowSums结合across可以一步完成需求,无需创建中间列或使用rowwise,代码更简洁高效:

library(dplyr)

df = tibble(a = c('-999', 'b', '-999'),
           b = c('-999', 'a', 'b'),
           c = 1:3)

df %>% 
  mutate(sum999 = rowSums(across(c(a, b), ~ .x == '-999')))

输出结果:

# A tibble: 3 × 4
  a     b         c sum999
  <chr> <chr> <int>  <dbl>
1 -999  -999      1      2
2 b     a         2      0
3 -999  b         3      1

原理说明:

  • across(c(a, b), ~ .x == '-999'):对指定列(a、b)逐元素判断是否等于'-999',生成一个逻辑矩阵(TRUE/FALSE)
  • rowSums():对每行的逻辑值求和,TRUE会被自动转换为1,FALSE转换为0,直接得到每行符合条件的数量

如果需要用正则表达式匹配列名(比如匹配以a或b开头的列),可以把c(a, b)换成matches('^[ab]'):

df %>% 
  mutate(sum999 = rowSums(across(matches('^[ab]'), ~ .x == '-999')))

这种方法相比原实现的优势:

  • 无需创建临时列,减少内存占用
  • 避免rowwise()分组,处理大数据集时性能更优
  • 代码逻辑更直观,一步到位

内容的提问来源于stack exchange,提问作者Juan C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:55:18