我对 R 比较陌生,并尝试使用 plyr 包中的 ddply 和汇总。这个帖子几乎但不完全回答了我的问题。我可以使用一些额外的解释/澄清。
我的问题:
我想创建一个简单的函数来按组汇总给定变量的描述性统计数据。与链接的帖子不同,我想将感兴趣的变量作为函数的参数包含在内。正如本网站已经讨论的那样,这有效:
require(plyr)
ddply(mtcars, ~ cyl, summarise,
mean = mean(hp),
sd = sd(hp),
min = min(hp),
max = max(hp)
)
但这不会:
descriptives_by_group <- function(dataset, group, x)
{
ddply(dataset, ~ group, summarise,
mean = mean(x),
sd = sd(x),
min = min(x),
max = max(x)
)
}
descriptives_by_group(mtcars, cyl, hp)
由于我正在处理的数据量很大,我希望能够有一个函数来指定我感兴趣的变量以及数据集和分组变量。
我试图编辑这里找到的各种解决方案来解决我的问题,但我对代码的理解不够好,无法成功完成。
原始海报使用以下示例数据集:
a = c(1,2,3,4)
b = c(0,0,1,1)
c = c(5,6,7,8)
df = data.frame(a,b,c)
sv = c("b")
使用所需的输出:
b Ave
1 0 1.5
2 1 3.5
哈德利认可的解决方案是:
myFunction <- function(x, y){
NewColName <- "a"
z <- ddply(x, y, .fun = function(xx,col){
c(Ave = mean(xx[,col],na.rm=TRUE))},
NewColName)
return(z)
}
WheremyFunction(df, sv)
返回所需的输出。
我试图逐段分解代码,看看是否可以通过更好地理解底层机制来修改代码以包含函数的参数,该参数将传递给在本例中为“ NewColName”(您要获取有关信息的变量)。但我没有任何成功。我的困难是我不明白发生了什么(xx[,col])
。我知道 mean(xx[,col]) 应该取col
数据框索引列的平均值xx
。但我不明白匿名函数从哪里读取这些值。
有人可以帮我解析一下吗?我已经浪费了几个小时在一个琐碎的任务上,我可以通过非常重复的代码和/或子集轻松完成,但我一直在试图让我的脚本更简单和优雅,以及理解这个问题的“原因”和其解决方案。
PS 我已经从 psych 包中查看了 describeBy 函数,但据我所知,它不允许您指定要为其返回值的变量,因此不能解决我的问题。