【发布时间】:2016-05-14 15:46:04
【问题描述】:
我试图在 y 变量下找到类别“a”和“b”的平均值和中位数。我正在尝试编写一个函数来进行此计算。这是以下示例数据集:
sample_data <- data.frame(x = 1:10, y = c("a","b"))
library(data.table)
sample_data_dt <- as.data.table(sample_data)
我尝试了以下方法,但找不到任何优雅/简单的方法来在 data.table 和 data.frame 中将列名作为函数参数传递。
data.table sample_data_dt 的一个工作脚本是:
apply_statistics_4 <- function(df, on_col, by_col){
df[, list(mean_value = mean(get(on_col)), median_value = median(get(on_col))), by = get(by_col)]}
apply_statistics_4(sample_data_dt, "x", "y") #works
但是,类似的脚本不适用于 ddply 函数上的 data.frame:
apply_statistics_5 <- function(df, on_col, by_col){
ddply(df,.(get(by_col)), summarize, mean1 = mean(get(on_col)), median1 = median(get(on_col)))}
apply_statistics_5(sample_data, "x", "y") #Does not work
# Error in get(by_col) : object 'y' not found
我使用 ddply 函数为 data.frame 找到的一个工作脚本是:
apply_statistics <- function(df, on_col, by_col){
df$y1 <- eval(substitute(by_col), df)
df$x1 <- eval(substitute(on_col), df)
ddply(df,.(y1), summarize, mean1 = mean(x1), median1 = median(x1))}
d <- apply_statistics(sample_data, x, y) #Works
如果您知道在 R 中为 data.table 和 data.frame 使用列名作为函数参数的任何其他方法,请与解释分享。
谢谢。
【问题讨论】:
标签: r dataframe data.table plyr