gpt4 book ai didi

r - 在函数中使用 ddply 并包含感兴趣的变量作为参数

转载 作者:行者123 更新时间:2023-12-02 08:14:48 25 4
gpt4 key购买 nike

我对 R 比较陌生,并尝试使用 plyr 包中的 ddply 和summary。 This post几乎但不完全回答了我的问题。我可以使用一些额外的解释/澄清。

我的问题:

我想创建一个简单的函数来按组汇总给定变量的描述性统计数据。与链接的帖子不同,我想将感兴趣的变量作为函数的参数包含在内。正如本网站已经讨论过的,这是可行的:

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)

由于我正在处理的数据量很大,我希望能够有一个函数,允许我指定我感兴趣的变量以及数据集和分组变量。

我尝试编辑找到的各种解决方案 here来解决我的问题,但我对代码的理解不够好,无法成功完成它。

原始海报使用了以下示例数据集:

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

Hadley 认可的解决方案是:

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)
}

其中 myFunction(df, sv) 返回所需的输出。

我尝试逐段分解代码,看看通过更好地理解底层机制,我是否可以修改代码以包含函数的参数,该参数将传递给什么,在本例中,是“NewColName”(您想要获取相关信息的变量)。但我没有取得任何成功。我的困难是我不明白 (xx[,col]) 发生了什么。我知道mean(xx[,col])应该取数据框xx索引为col的列的平均值。但我不明白匿名函数从哪里读取这些值。

有人可以帮我解析一下吗?我在一项琐碎的任务上浪费了时间,我可以通过非常重复的代码和/或子集轻松完成,但我沉迷于试图使我的脚本更加简单和优雅,以及理解这个问题的“原因”和它的解决方案。

PS我已经研究了psych包中的describeBy函数,但据我所知,它不允许您指定要返回值的变量,因此不能解决我的问题。

最佳答案

我刚刚在您提供的示例函数中移动了一些内容,并展示了如何返回多个列。这符合你的要求吗?

myFunction2 <- function(x, y, col){
z <- ddply(x, y, .fun = function(xx){
c(mean = mean(xx[,col],na.rm=TRUE),
max = max(xx[,col],na.rm=TRUE) ) })
return(z)
}

myFunction2(mtcars, "cyl", "hp")

关于r - 在函数中使用 ddply 并包含感兴趣的变量作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18516548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com