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

如何在R中创建统计非NA文本字段数量的新变量behave?

问题:统计问卷开放式文本字段填写数量的简便R方法

我是心理学专业的R语言新手,正在分析一份末尾包含5个开放式文本字段的问卷。我希望统计每位参与者填写的文本字段数量,因此需要创建名为behave的新变量来存储该数据。

当前数据示例

# 目前的数据框类似这样(T表示文本字段已填写):
S1 <- c(T,T,NA,T)
S2 <- c(T,NA,NA,T)
S3 <- c(T,NA,NA,NA)
S4 <- c(T,NA,NA,NA)
S5 <- c(NA,NA,NA,NA)
# 组合为数据框
df <- data.frame(S1, S2, S3, S4, S5)

期望结果

# 想要得到的结果:
S1 <- c(T,T,NA,T)
S2 <- c(T,NA,NA,T)
S3 <- c(T,NA,NA,NA)
S4 <- c(T,NA,NA,NA)
S5 <- c(NA,NA,NA,NA)
behave <- c(4, 1, 0, 2)
df_result <- data.frame(S1, S2, S3, S4, S5, behave)

我曾尝试使用ifelse函数实现,但该方法繁琐且容易出错,因此想询问是否有更简便的实现方式。


解决方案

方法1:基础R一行搞定

利用rowSums函数,R中TRUE等价于1,NA等价于0,配合na.rm=TRUE忽略缺失值,直接按行求和:

# 构造数据框
df <- data.frame(S1, S2, S3, S4, S5)
# 添加behave变量
df$behave <- rowSums(df, na.rm = TRUE)

运行后df会自动新增behave列,值正好是每行已填写的文本字段数量。

方法2:tidyverse工具实现(适合后续批量处理)

如果习惯用tidyverse系列包(比如dplyr),可以用按行计算的方式:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(behave = sum(c_across(S1:S5), na.rm = TRUE)) %>%
  ungroup()
  • rowwise()指定按行操作
  • c_across(S1:S5)选中需要统计的5个文本字段列
  • sum(..., na.rm=TRUE)计算每行非NA值的数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:36:18