我正在尝试查找y变量下类别“a”和“b”的平均值和中值。我想写一个函数来做这个计算。这是下面的示例数据集:将列名作为函数参数传递 - R
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
然而,类似的脚本不适合data.frame上工作ddply功能:
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
如果你知道任何其他方法od对于data.table和data.frame在R中使用列名作为函数参数,请分享解释。
谢谢。
您可以选择[这里](http://stackoverflow.com/questions/10178203/sending-in-column-name-to-ddply-from-function) – akrun
对于'data.table',你也可以使用(mean_value = mean(.SD [[1L]]),median_value = median(.SD [[1L]])),by = by_col, .SDcols = on_col] }'对于'ddply'另一个链接是[here](http://stackoverflow.com/questions/6584030/using-ddply-inside-a-function) – akrun
@akrun - 非常感谢你分享这个输入。这真的很有帮助。 – skumar