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

如何优化R语言中特定列满足条件的行求和代码?

解决方案

方法1:用rowwise() + c_across()实现

直接在单个mutate语句里,通过c_across(v1:v4)获取每行指定范围的列值,判断是否等于"a"后求和,完全不会修改原有列:

library(dplyr)

# 示例数据
df <- tibble(
  v1 = c("a", "b", "a"),
  v2 = c("b", "a", "a"),
  v3 = c("a", "c", "b"),
  v4 = c("d", "a", "a"),
  other_col = c(1, 2, 3) # 保留的其他列
)

# 生成n_a列,原列丝毫不改
df <- df %>%
  rowwise() %>%
  mutate(n_a = sum(c_across(v1:v4) == "a")) %>%
  ungroup() # 别忘了取消行分组,避免后续操作受影响

方法2:向量化写法(更高效,无需rowwise())

如果数据量较大,逐行处理的rowwise速度偏慢,用rowSums配合across做向量化判断,性能提升明显,同样满足要求:

df <- df %>%
  mutate(n_a = rowSums(across(v1:v4, ~ .x == "a"), na.rm = TRUE))

关键说明

  • 两种方法都仅新增n_a列,v1-v4及其他原有列完全保持原样
  • 均支持v1:v4这类列范围语法,无需逐个输入列名
  • 数据量大时优先选方法2,向量化处理速度远快于逐行计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:22:12