为大因子数据集创建摘要统计信息(summarise_all),保留因子信息

时间:2018-08-29 14:50:37

标签: r class dplyr label summarize

我有一个包含观察调查数据的大型数据集,我希望将这些数据汇总到国家/地区年级(也用于因子),以便将数据用作另一个数据集中的国家/地区级数据。我要汇总的一个df具有以下类:

character  labelled   numeric 
       24       272        50

我相当确定标记的类是Hmisc库的结果。

我开始时如下,效果很好。

dfsum <- df %>%
 group_by(countryyear) %>%
 summarise_all(funs(if(is.numeric(.)) mean(., na.rm = TRUE) else first (.)))

令人惊讶的是,这留下了244/346个变量(我不知道为什么会有这个数字,任何解释都很好)。

我想在dfsum中包括尽可能多的列。我意识到,对于无序因素,它不会提供任何有用的信息,但会为有序因素提供信息。对于二进制变量,例如0到1之间的值将给我每个类别的大小,而序数变量通常是小数位数。我尝试这样做:

dfsum <- df%>%
 group_by(countryyear) %>%
 summarise_all(funs(if(is.numeric(.)|is.factor(.)) mean(., na.rm = TRUE) else first (.)))

但这并没有真正做任何事情(不添加任何额外的变量)。

更重要的是,我希望在汇总过程中保留因子信息。是否有可能以其他方式重新附加该信息?例如,它是一个二进制值(可能是原始变量的50%以上是0还是1),还是加上了小数位数(取原始变量的最小值和最大值)?

1 个答案:

答案 0 :(得分:0)

通过结合许多其他答案,请查看相应的链接,我设法按如下方式解决了我的问题:

#1
as.numeric.factor <- function(x) {as.numeric(as.character(x))}
#2
df[] = lapply(df, as.numeric.factor)
#3
cols = sapply(df, is.numeric)
cols = names(cols)[cols]
#4
dfsummary = df[, lapply(.SD, mean, na.rm=TRUE), .SDcols = cols, by=countryyear]

1234