在 R 中,我有一个包含超过 400 列(调查问题)和 5000 行(参与者)的数据集
我想计算每个问题记录了多少个回复,即对于问题 1 到 3 有 4 个回复,然后对于 Q3a 和 Q4 有 2 个回复。
有没有一种方法可以对此进行计数并生成一个包含每列计数的表格,而无需专门命名所有 400 列?
大多数回复都是数字形式,但也有一些是文本形式。
谢谢你
学习 R,到目前为止我见过的解决方案都无法解决此问题
如果满足您的条件,您可以使用
colSums
创建逻辑向量(即 TRUE
/FALSE
) - 在 R 中,逻辑在数学上被视为 1 (TRUE) 和 0 (FALSE)。因此,使用 colSums
将总结您所需要的内容。
从您的图像来看,您似乎有两种类型的列。主要答案有数字答案,有些问题有自由文本。因此,我们需要创建另一个逻辑向量
x
,将它们分开:
x <- vapply(df, is.numeric, logical(1L))
x[x] <- colSums(df[x] != 0)
x[!x] <- colSums(!is.na(df[!x]))
# Q1 Q2 Q3 Q3a Q4
# 4 4 4 2 2
数据:
df <- data.frame(Q1 = c(1,2,1,1),
Q2 = c(1,1,1,2),
Q3 = c(7,5,1,4),
Q3a = c("other", "shop", NA, NA),
Q4 = c(1,0,2,0))