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

如何在DataFrame全列使用across函数?及rowSums相关问题求解

问题解决及原因解析

1. 遍历所有列统计TRUE次数

要让across遍历所有列,直接使用across(everything())即可,无需复杂语法。结合rowSums的正确写法如下:

dplyr管道版

# 通用写法(兼容非逻辑列)
data_1 <- data_1 %>% 
  mutate(True_Count = rowSums(across(everything(), ~ .x %in% TRUE), na.rm = TRUE))

# 若所有列都是逻辑型,可简化为
data_1 <- data_1 %>% 
  mutate(True_Count = rowSums(across(everything()), na.rm = TRUE))

2. rowSums直接赋值无效的问题

你写的代码里存在变量名不匹配的错误:数据集是data_1,但代码里用了未定义的df,导致无法正确计算。修正后加上na.rm=TRUE避免NA干扰结果:

# 统计TRUE出现次数
data_1$True_Count <- rowSums(data_1 == TRUE, na.rm = TRUE)

# 统计字符串"banana"出现次数
data_1$True_Count <- rowSums(data_1 == "banana", na.rm = TRUE)

注意:统计字符串时要确保目标列是字符型,否则比较结果会全为FALSE。

3. 重复运行原代码计数错误的原因

第一次运行后,data_1新增了True_Count数值列。第二次运行时,across(-c(Community.name))会包含这个新增列,而R中数值1等价于TRUE(1 == TRUE返回TRUE),每次重复运行都会把上一次的统计结果也计入,导致计数累加变大。

解决方法二选一:

  • 每次运行前删除已存在的True_Count列:
    if ("True_Count" %in% colnames(data_1)) data_1$True_Count <- NULL
    data_1 <- data_1 %>% mutate(True_Count = rowSums(across(-c(Community.name), `%in%`, TRUE), na.rm = TRUE))
    
  • 在across中明确排除True_Count:
    data_1 <- data_1 %>% 
      mutate(True_Count = rowSums(across(-c(Community.name, True_Count), `%in%`, TRUE), na.rm = TRUE))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:36:14