我喜欢 psych::describe 的汇总统计数据,但我想用众数替换平均值,但仅适用于因子变量。如何对 Mode 的输出进行编程以替换 setosa(或任何其他因素变量) 我使用 iris 进行复制,即使它只有一个。
getMode <- function(df) {
ux <- na.omit(unique(df))
ux[which.max(tabulate(match(df, ux)))]
}
Mode <- apply(iris%>% select(where(is.factor)), 2, getMode)
#I only want 5 of psych's descriptive stats plus the mode.
table <- cbind(psych::describe(iris),
Mode) [,c(3,4,8,9,2, 14)]
table
如何根据变量的结构来组合均值和模式?
- 有没有办法结合
if_else
where 告诉 R 什么时候做什么FALSE
?如果当变量不是一个因素时我能得到输出的平均值,我会得到一个结合了平均值和模式的列。
Psych
生成一个数据框,其中标识变量名称不可选择,因此这使得任何手动编码或在 mutate() 中列出变量都是不可能的。它们也是我数据集中的大多数变量(因此即使可以完成手动或 mutate(case_when) 也会非常乏味)。
PS。我尝试更改我apply()
的 tomap
函数,但输出与 the 不兼容,cbind()
因为它会列出每个因素的其他级别。如果您对代码的那部分有更好的想法,或者认为这是我可以结合的地方getMode
,mean()
我不介意建议。