我的数据框包含118个变量0's
,1's
99's
和NA's
。我需要计算每个变量有多少99's
,NA's
,1's
和0's
(99
是“不适用”,{{1是“否”,0
是“是”而1
是“无回答”)。我尝试使用NA
函数执行此操作,但它适用于向量,如何为所有变量集执行此操作?
数据框有一个可重复的例子:
table
我需要在数据框中写入变量的结果,如下所示:
forest<-c(1,1,1,1,0,0,0,1,1,1,0,NA,0,NA,0,99,99,1,0,NA)
water<-c(1,NA,NA,NA,NA,99,99,0,0,0,1,1,1,0,0,NA,NA,99,1,0)
rain<-c(1,NA,1,0,1,99,99,0,1,0,1,0,1,0,0,NA,99,99,1,1)
fire<-c(1,0,0,0,1,99,99,NA,NA,NA,1,0,1,0,0,NA,99,99,1,1)
df<-data.frame(forest,water,rain,fire)
答案 0 :(得分:2)
rbind(sapply(df,table),"NA"=sapply(df, function(y) sum(is.na(y))))
forest water rain fire
0 7 6 6 6
1 8 5 8 6
99 2 3 4 4
NA 3 6 2 4
答案 1 :(得分:2)
找不到好的傻瓜,所以我的评论作为答案:
数据框实际上是列的列表。 .countup-text
将一个函数应用于输入中的每个项目(如果是数据框,则为每一列),并返回包含每个结果的列表:
lapply
lapply(df, table)
# $forest
#
# 0 1 99
# 7 8 2
#
# $water
#
# 0 1 99
# 6 5 3
#
# $rain
#
# 0 1 99
# 6 8 4
#
# $fire
#
# 0 1 99
# 6 6 4
与sapply
类似,但会尝试 s 表示结果,而不是始终返回lapply
。在这两种情况下,您都可以将其他参数传递给正在应用的函数,例如list
到useNA = "always"
,以便在输出中包含table
:
NA
对于 lot 更多信息,请查看R Grouping functions: sapply vs. lapply vs. apply. vs. tapply vs. by vs. aggregate
要与其他答案进行比较:sapply(df, table, useNA = "always")
# forest water rain fire
# 0 7 6 6 6
# 1 8 5 8 6
# 99 2 3 4 4
# <NA> 3 6 2 4
与apply
和lapply
类似,但它适用于矩阵或更高维数组。您应该在 sapply
上使用apply
的唯一时间是您需要将函数应用于每一行。对于数据框列上的函数,请更喜欢data.frame
或lapply
。原因是sapply
会先将数据框强制转换为apply
,如果您有不同类的列,则会产生意外后果。
答案 2 :(得分:1)
这应该这样做:
tables <- apply(df, 2, FUN = table)
答案 3 :(得分:1)
可能有一种方法可以一举做到。
申请(df,2,表格)
apply(df,2,function(x){sum(is.na(x))})
答案 4 :(得分:1)
由于变量是因素,您应该首先将它们转换为它:
df <- lapply(df, as.factor)
然后,汇总您的data.frame
:
sapply(df, summary)
summary()
函数的因子方法计算每个级别。