Pass column names as function arguments - R
我试图在y变量下找到类别" a"和" b"的均值和中位数。 我正在尝试编写一个函数来执行此计算。 以下是样本数据集:
1 2 3 | 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的一种工作脚本是:
1 2 3 | 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:
1 2 3 4 | 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找到的一个工作脚本是:
1 2 3 4 5 | 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的任何其他方法,请共享说明。
谢谢。
看来这不是一个
1 2 3 4 5 6 7 8 9 | m <-"x" n <-"y" apply_statistics_5 <- function(df, m, n){ ddply(df, n, summarise, mean1 = mean(get(m)), median1 = median(get(m))) } apply_statistics_5(sample_data,"x","y") y mean1 median1 1 a 5 5 2 b 6 6 |
如果
更新:
它可能与此处提到的
您可以按以下方式引用列名:
1 2 | sample_data[["y"]] sample_data_dt[["y"]] |
对于两种类型,另一个类似(尽管不完全相同)的命令是
1 2 3 4 5 6 | on_col <-"x" subset(sample_data, select=get(on_col)) subset(sample_data_dt, select=get(on_col)) by_col <-"y" subset(sample_data, subset=get(by_col)=="a") subset(sample_data_dt, subset=get(by_col)=="a") |
请注意,行号在