首页 > 解决方案 > 计算非空白列的数量并分配给个别受访者

问题描述

我正在尝试获取将在以后的步骤中成为分母的朋友总数。

示例数据:

  set.seed(24)  ## for sake of reproducibility
 n <- 5
data <- data.frame(id=1:n, 
               Q1= c("same", "diff", NA, NA, NA),
               Q2= c("diff", "diff", "same", "diff", NA),
               Q3= c("same", "diff", NA ,NA, "diff"), 
               Q4= c("diff", "same", NA, NA, NA))

我首先需要创建一个列,其中包含每个参与者响应的列数的数字计数(“相同”或“差异”,不计算 NA/空白)。我试过以下

  friendship <- total.friends <- rowSums(c(data$Q1, data$Q2, data$Q3, data$Q4)), != "")
  friendship <- total.friends <-rowSums(!is.na(c(data$Q1, data$Q2, data$Q3, data$Q4)))

两者都无效,可能是因为我的数据不是数字。第一个确实计算了单元格,但没有按照我的要求按 id 分组。有什么函数可以用来计算填充的单元格吗?我如何编辑它以计算仅填充“差异”的单元格,以便我可以开始第二步(制作比例)?

标签: r

解决方案


这是一个正则表达式解决方案grep

data$count <- apply(data, 1, function(x) length(grep("[a-z]", x, value = T)))

这里使用您计算在任何行单元格中找到小写字母length的次数。grep

结果:

data
  id   Q1   Q2   Q3   Q4 count
1  1 same diff same diff     4
2  2 diff diff diff same     4
3  3 <NA> same <NA> <NA>     1
4  4 <NA> diff <NA> <NA>     1
5  5 <NA> <NA> diff <NA>     1

推荐阅读