R 对多个变量应用多个函数(长格式)
我已经阅读了几个相关的线程,了解如何将许多不同的函数应用于data.tables中的许多不同列。 和。他们都很有帮助,但我正在寻找一个更优雅的解决方案来解决类似的问题 从以上两个链接中,可以看到以下代码:R 对多个变量应用多个函数(长格式),r,dplyr,data.table,R,Dplyr,Data.table,我已经阅读了几个相关的线程,了解如何将许多不同的函数应用于data.tables中的许多不同列。 和。他们都很有帮助,但我正在寻找一个更优雅的解决方案来解决类似的问题 从以上两个链接中,可以看到以下代码: library(data.table) DT <- data.table(x= rnorm(50), y = rnorm(50), treatment = c(0,1)) vars <- c("x", "y") my.summary
library(data.table)
DT <- data.table(x= rnorm(50), y = rnorm(50), treatment = c(0,1))
vars <- c("x", "y")
my.summary = function(x) c(Mean = mean(x, na.rm = T), Min = min(x, na.rm = T), Q1 = quantile(x, 0.25, na.rm =T),
Median = median(x, na.rm = T), Q3 = quantile(x, 0.75, na.rm=T), Max = max(x, na.rm = T))
summ_stats <- DT[, as.list(unlist(lapply(.SD, my.summary))), .SDcols = vars, by = .(treatment)]
我正在寻找类似的东西,但我想要的(使用data.table的速度)是如下所示:
variable treatment Max Min Q1 Median Q3, Max, p.value
x 0
1
y 0
1
如有任何建议,将不胜感激 从OP的输出中,我们可以使用
melt
来重塑为“长”格式
library(data.table)
out <- melt(summ_stats, id.vars = 'treatment', measure =
patterns("Mean", "Min", "Q1.25%", "Median", "Q3.75%", "Max"),
value.name = c("Mean", "Min", "Q1.25%", "Median", "Q3.75%", "Max") )[,
variable := c("x", "y")[variable]][]
out[duplicated(variable), variable := ""][]
setcolorder(out, c("variable", setdiff(names(out), "variable")))
out
# variable treatment Mean Min Q1.25% Median Q3.75% Max
#1: x 0 -0.04316915 -1.624365 -0.5417604 -0.16117851 0.4965782 2.229262
#2: 1 0.14239444 -2.904899 -0.7059286 0.27866472 1.2693872 1.696948
#3: y 0 0.32307227 -1.648222 -0.4209979 0.49096737 1.3184009 2.507111
#4: 1 -0.21832078 -1.890027 -0.6968235 -0.08252376 0.3694591 1.034514
f
前缀函数已经过优化,速度会非常快
此外,descr
可以得到每组的分位数以及其他描述性统计数据
descr(DT, g = DT$treatment)
从OP的输出中,我们可以使用
melt
将其重塑为“长”格式
library(data.table)
out <- melt(summ_stats, id.vars = 'treatment', measure =
patterns("Mean", "Min", "Q1.25%", "Median", "Q3.75%", "Max"),
value.name = c("Mean", "Min", "Q1.25%", "Median", "Q3.75%", "Max") )[,
variable := c("x", "y")[variable]][]
out[duplicated(variable), variable := ""][]
setcolorder(out, c("variable", setdiff(names(out), "variable")))
out
# variable treatment Mean Min Q1.25% Median Q3.75% Max
#1: x 0 -0.04316915 -1.624365 -0.5417604 -0.16117851 0.4965782 2.229262
#2: 1 0.14239444 -2.904899 -0.7059286 0.27866472 1.2693872 1.696948
#3: y 0 0.32307227 -1.648222 -0.4209979 0.49096737 1.3184009 2.507111
#4: 1 -0.21832078 -1.890027 -0.6968235 -0.08252376 0.3694591 1.034514
f
前缀函数已经过优化,速度会非常快
此外,descr
可以得到每组的分位数以及其他描述性统计数据
descr(DT, g = DT$treatment)
基本(
data.frame
)、dplyr(tbl_df
)或数据都没有。表
显示类似的表。您所要求的并不是关于数据处理(为其设计了dplyr
和data.table
),而是关于报表呈现。如果不是为了报表,我不鼓励修改数据使其看起来像这样,因为以后对它所做的任何操作都可能需要推断空值应该是什么,虽然这对于控制它的组合方式似乎是无害的,但在失败之前都很简单。谢谢您的评论!它将用于一个报告,我将上面修改的data.table放入R markdown笔记本中的kable()函数中。不过,感谢您的评论!基本(data.frame
)、dplyr(tbl_df
)或数据都没有。表
显示类似的表。您所要求的并不是关于数据处理(为其设计了dplyr
和data.table
),而是关于报表呈现。如果不是为了报表,我不鼓励修改数据使其看起来像这样,因为以后对它所做的任何操作都可能需要推断空值应该是什么,虽然这对于控制它的组合方式似乎是无害的,但在失败之前都很简单。谢谢您的评论!它将用于一个报告,我将上面修改的data.table放入R markdown笔记本中的kable()函数中。不过,感谢您的评论!