gpt4 book ai didi

r - 将分组数据帧传递给 dplyr 中的自己的函数

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

我正在尝试从 plyr 转移到 dplyr。但是,我似乎仍然无法弄清楚如何在链接的 dplyr 函数中调用自己的函数。

我有一个带有分解 ID 变量和顺序变量的数据框。我想按 ID 拆分框架,按 order 变量对其进行排序,然后在新列中添加一个序列。

我的 plyr 函数如下所示:

f <- function(x) cbind(x[order(x$order_variable), ], Experience = 0:(nrow(x)-1))
data <- ddply(data, .(ID_variable), f)

在 dplyr 我虽然这应该看起来像这样
f <- function(x) cbind(x[order(x$order_variable), ], Experience = 0:(nrow(x)-1))
data <- data %>% group_by(ID_variable) %>% f

谁能告诉我如何修改我的 dplyr 调用以成功传递我自己的函数并获得我的 plyr 函数提供的相同功能?

编辑:如果我使用这里描述的 dplyr 公式,它确实将一个对象传递给 f。然而,虽然 plyr 似乎传递了许多不同的表(由 ID 变量拆分),但 dplyr 不会传递每组一个表,而是传递整个表(作为某种 dplyr 对象,其中组被注释),因此当我 cbind经验变量它附加一个从 0 到整个表而不是单个组的长度的计数器。

我找到了一种使用这种方法在 dplyr 中获得相同功能的方法:
data <- data %>%
group_by(ID_variable) %>%
arrange(ID_variable,order_variable) %>%
mutate(Experience = 0:(n()-1))

但是,我仍然很想学习如何将分组变量分成不同的表传递给 dplyr 中的自己的函数。

最佳答案

对于那些从谷歌来到这里的人。假设您编写了自己的打印功能。

printFunction <- function(dat) print(dat)
df <- data.frame(a = 1:6, b = 1:2)

正如这里被问到的
df %>% 
group_by(b) %>%
printFunction(.)

打印整个数据。要让 dplyr 打印分组的多个表,您应该使用 do
df %>% 
group_by(b) %>%
do(printFunction(.))

关于r - 将分组数据帧传递给 dplyr 中的自己的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28201066/

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