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

在R数据框中统计已填充的Team_x列数并生成新列

统计R数据框中每行非NA的Team_x列数量

我有一个名为df_team的R数据框,包含上百组Team_x和Team_URL_x格式的列,部分Team_x列存在NA值。需要新增Team_Count列,统计每行中非NA的Team_x列数量,以此获取每个Project对应的团队成员数。

数据框结构

dput(df_team)

structure(list(Project = c("etwbv", "werg", "sdfg", "qwreg", 
"cae", "refdc"), Team_1 = c("ewrg", "werg", "asd", "qwe", NA, 
"vsfd"), Team_URL_1 = c("abc", "bfh", "fse", "rege", NA, "vsefr"
), Team_2 = c("abc1", "bfh", "fse", "rege1", NA, NA), Team_URL_2 = c("abc", 
"bfh", "fse", "rege", NA, NA), Team_3 = c("abc1", "bfh", NA, 
NA, NA, NA), Team_URL_3 = c("abc", "bfh", NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-6L))

预期结果

Project Team_1 Team_URL_1 Team_2 Team_URL_2 Team_3 Team_URL_3 Team_Count
etwbv   ewrg   abc        abc1   abc        abc1   abc        3
werg    werg   bfh        bfh    bfh        bfh    bfh        3
sdfg    asd    fse        fse    fse        NA     NA         2
qwreg   qwe    rege       rege1  rege       NA     NA         2
cae     NA     NA         NA     NA         NA     NA         0
refdc   vsfd   vsefr      NA     NA         NA     NA         1

解决方案

方法1:Base R

通过正则匹配筛选出所有Team_x格式的列,再逐行统计非NA值的数量:

# 筛选所有Team_x列(排除Team_URL_x)
team_cols <- grep("^Team_\\d+$", names(df_team), value = TRUE)
# 新增Team_Count列
df_team$Team_Count <- rowSums(!is.na(df_team[team_cols]))

方法2:dplyr包

使用dplyr的语法更简洁地完成操作:

library(dplyr)

df_team <- df_team %>%
  mutate(Team_Count = rowSums(!is.na(select(., starts_with("Team_") & matches("\\d+$")))))

说明

  • 正则表达式^Team_\\d+$用于精准匹配Team_后接数字的列,确保只统计Team_x而不包含Team_URL_x。
  • !is.na()将非NA值转换为逻辑值TRUE(对应数值1),NA值转换为FALSE(对应数值0),rowSums()对每行求和即可得到非NA的Team_x列数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:22:17