gpt4 book ai didi

r - 在函数中获取并处理 ddply 中的整行

转载 作者:行者123 更新时间:2023-12-04 12:28:15 25 4
gpt4 key购买 nike

在 ddply 中抓取一个或多个进行处理很容易,但是有没有办法抓取整个当前行并将其传递给函数?或者获取一组在运行时确定的列?

让我举例说明:

给定一个像

这样的数据框
df = data.frame(a=seq(1,20), b=seq(1,5), c= seq(5,1))
df
a b c
1 1 1 5
2 2 2 4
3 3 3 3

我可以编写一个函数来对数据框的一行中的命名列求和,如下所示:

selectiveSummer = function(row,colsToSum) {
return(sum(row[,colsToSum]))
}

当我像这样连续调用它时它会起作用:

> selectiveSummer(df[1,],c('a','c'))
[1] 6

所以我想将它包装在一个匿名函数中,并在 ddply 中使用它来将它应用于表中的每一行,如下例所示

f = function(x) { selectiveSummer(x,c('a','c')) }
#this doesn't work!
ddply(df,.(a,b,c), transform, foo=f(row))

我想找到一个解决方案,可以在运行时确定要操作的列集,所以如果有某种方法可以从 ddply 的 args 中提取它并将其传递给一个接受任意数量 args 的函数,那么也有效。

编辑:需要说明的是,驱动这个的真正应用不是求和,但这是一个更简单的解释

最佳答案

如果可以使用一个或多个变量以唯一方式标识行,则只能使用 ddply 选择单行。如果有相同的行,ddply 将循环遍历多行的数据帧,即使您使用所有列(如 ddply(df, names(df), f)。

为什么不使用 apply 呢? Apply 会迭代各个行。

apply(df, 1, function(x) f(as.data.frame(t(x)))))

结果:

[1]  6  6  6  6  6 11 11 11 11 11 16 16 16 16 16 21 21 21 21 21

关于r - 在函数中获取并处理 ddply 中的整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5357003/

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