为大型因子数据集创建汇总统计(summarise_all),保留因子信息
Creating summary statistics (summarise_all) for a large factor dataset, retaining factor info
我有一个包含观察调查数据的大型数据集,我想将其汇总到国家/地区年级别(也用于因子),以便将该数据用作另一个数据集中的国家/地区级别数据。我想汇总的一个 df
具有以下 classes:
character labelled numeric
24 272 50
我很确定标记的 class 是 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
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]
1, , 3, 4
我有一个包含观察调查数据的大型数据集,我想将其汇总到国家/地区年级别(也用于因子),以便将该数据用作另一个数据集中的国家/地区级别数据。我想汇总的一个 df
具有以下 classes:
character labelled numeric
24 272 50
我很确定标记的 class 是 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
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]