R 计数非NA值并按变量分组
我试图在不使用R 计数非NA值并按变量分组,r,count,aggregate,na,R,Count,Aggregate,Na,我试图在不使用complete.cases包或任何其他包的情况下,显示每个变量ID有多少完整的观察结果 如果我使用na.ommit过滤掉na值,我将丢失所有可能没有完整案例的ID 最后,我想要一个包含两列的频率表:ID和Number of Complete Observations > length(unique(data$ID)) [1] 332 > head(data) ID value 1 1 NA 2 1 NA 3 1 NA 4 1 NA 5
complete.cases
包或任何其他包的情况下,显示每个变量ID
有多少完整的观察结果
如果我使用na.ommit
过滤掉na值,我将丢失所有可能没有完整案例的ID
最后,我想要一个包含两列的频率表:ID
和Number of Complete Observations
> length(unique(data$ID))
[1] 332
> head(data)
ID value
1 1 NA
2 1 NA
3 1 NA
4 1 NA
5 1 NA
6 1 NA
> dim(data)
[1] 772087 2
当我尝试创建自己的函数z
——该函数计算非NA值,并将其应用于aggregate()
函数时,没有完整观测值的ID被忽略。我应该留下332行,而不是323行。如何使用基函数解决这个问题
z <- function(x){
sum(!is.na(x))
}
aggregate(value ~ ID, data = data , FUN = "z")
> nrow(aggregate(isna ~ ID, data = data , FUN = "z"))
[1] 323
z nrow(聚合(isna~ID,data=data,FUN=“z”))
[1] 323
执行此操作的方法之一是使用表
:
df2 <- table(df$Id, !is.na(df$value))[,2]
data.frame(ID = names(df2), value = df2)
其中一种方法是使用
表
:
df2 <- table(df$Id, !is.na(df$value))[,2]
data.frame(ID = names(df2), value = df2)
Base
R
您可以像这样使用实用程序功能:
stack(by(data$value, data$ID, FUN=function(x) sum(!is.na(x))))
Base
R
您可以像这样使用实用程序功能:
stack(by(data$value, data$ID, FUN=function(x) sum(!is.na(x))))
为此,您可以直接使用表。下面是示例代码:
df1 <- structure(list(Id = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4), value = c(2,
1, 1, NA, NA, NA, 3, NA, 3, 3, 4, 4)), .Names = c("Id", "value"
), row.names = c(NA, -12L), class = "data.frame")
df2 <- as.data.frame.matrix(with(df1, table(Id, value)))
resultDf <- data.frame(Id=row.names(df2), count=apply(df2, 1, sum))
resultDf
df1为此,您可以直接使用表。下面是示例代码:
df1 <- structure(list(Id = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4), value = c(2,
1, 1, NA, NA, NA, 3, NA, 3, 3, 4, 4)), .Names = c("Id", "value"
), row.names = c(NA, -12L), class = "data.frame")
df2 <- as.data.frame.matrix(with(df1, table(Id, value)))
resultDf <- data.frame(Id=row.names(df2), count=apply(df2, 1, sum))
resultDf
df1您能将数据输出吗?这不是一个好的解决方案,但您可以将所有NA值设置为一个数值(例如0或9999999),该数值不存在于值
变量中。计算行中没有该数字的观察数。然后将所有这些数字设置回NA。complete.cases
是一个函数而不是一个包请参见聚合的“NA.action”参数--“NA.action=NULL”。或者,在这种情况下,您可以使用table
像table(!is.na(data$value),data$ID)
这样的your dput()您的数据?这不是一个好的解决方案,但是您可以将所有na值设置为一个在value
变量中不存在的数字(例如0或999999)。计算行中没有该数字的观察数。然后将所有这些数字设置回NA。complete.cases
是一个函数而不是一个包请参见聚合的“NA.action”参数--“NA.action=NULL”。或者,对于这种情况,您可以使用table
像table(!is.na(data$value),data$ID)