r - 计算每组的完整个案

标签 r function count

我有一个大数据集(大约 10000 行),我想创建一个函数来计算每组完整案例(不是 NA)的数量。我尝试了各种函数(聚合、表、sum(complete.cases)、group_by 等),但不知何故我错过了一个——可能是小技巧。感谢您的帮助!

一个小样本数据集来解释,我需要的结果。

x <- data.frame(group = c(1:4), 
                age = c(4:1, c(11, NA,13, NA)), 
                speed = c(12, NA,15,NA))
print(x)
#  group age speed
#1     1   4    12
#2     2   3    NA
#3     3   2    15
#4     4   1    NA
#5     1  11    12
#6     2  NA    NA
#7     3  13    15
#8     4  NA    NA

我写的一个函数是这样写的:

CountPerGroup <- function(group) {
    data.set <- subset(x,group %in% group)

    vect <- vector()
    for (i in 1:length(group)) {
        vect[i] <- sum(complete.cases(data.set))
    }
    output <- data.frame(cbind(group,count=vect))   
    return(output)

}

结果

CountPerGroup(2:1)

  group count
1     2     4
2     1     4

不幸的是,这是错误的。相反,结果应该是这样的

  group count
1     2     1
2     1     4

我错过了什么?我如何告诉 R 计算 complete.cases per Group? 非常感谢您对此提供的任何帮助!

最佳答案

如果您希望维护您的功能,类似的东西应该可以解决问题:

x <- data.frame(group = c(1:4), 
                age = c(4:1, c(11, NA,13, NA)), 
                speed = c(12, NA,15,NA))

CountPerGroup <- function(x, groups) {
  data.set <- subset(x, group %in% groups)
  ans <- sapply(split(data.set, data.set$group), 
                function(y) sum(complete.cases(y)))
  return(data.frame(group = names(ans), count = unname(ans)))
}


CountPerGroup(x, 1:2)
#  group count
#1     1     2
#2     2     0

据我所知,这是正确的。但它不同意您建议的结果。

编辑

看来您想要的是非NA 的数量并正确排序。请改用此功能:

CountPerGroup2 <- function(x, groups) {
   data.set <- subset(x, group %in% groups)
   ans <- sapply(split(data.set, data.set$group), 
                 function(y) sum(!is.na(y[, !grepl("group", names(y))])))[groups]
   return(data.frame(group = names(ans), count = unname(ans)))
}

CountPerGroup2(x, 2:1)
#  group count
#1     2     1
#2     1     4

关于r - 计算每组的完整个案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943775/

相关文章:

r - 完全删除并重新安装 R,包括所有软件包

R:plot:在一个 A4 pdf 页面上正确拟合多个图

作为函数调用的 PHP 类

php - 页面加载后javascript函数不工作

linux - 创建 256 个做同样事情的函数 - 创建一个不区分大小写的函数 - 一个将所有参数传递给函数的衬里?

elasticsearch - 按最后一分钟和事件级别获取事件计数

Mysql 每列计数

SQL 计数不存在的项目

R Studio - 由于空提交消息而中止提交 - 使用 blogdown 部署时

r - 从 R 中的 (xy) 坐标创建热图