gpt4 book ai didi

r - 从 d_ply 内部访问分组变量

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

我刚刚发现了伟大的plyr包装,我正在兜风。

我有一个问题如下:是否有某种方法可以从 d_ply 中访问分组变量? ?

假设我有一个数据框 df带列x,y,z ,我想为每个 z 绘图值 xy .如果我执行以下操作:

plotxy = function(df, ...) {plot(df$x, df$y, ...)}
d_ply(df, .(z), plotxy(df, main=.(z)))

那么图中显示的标题都是“z”,而不是 z 变量的值。有没有办法从 d_ply 中访问这些值? ?

编辑:正如@Justin 指出的那样,上述公式是错误的,因为我通过了整个 dfplotxy .因此这条线
d_ply(df, .(z), plotxy(df, main=.(z)))

应该
d_ply(df, .(z), plotxy, main=.(z))

为了使我最初的问题有意义(我想这也是@joran 暗示的)。

然而,我意识到了另外一件事。即使 df被切开 z来自 d_ply ,函数接收到的子数据帧还有一个 z列 - 只是始终具有相同的值。因此,问题显然可以解决如下:
plotxy = function(df, ...) {plot(df$x, df$y, main=df$z[1])}
d_ply(df, .(z), plotxy)

最佳答案

举例来说,我将扩展 Joran 的关注点。

df <- data.frame(x=rnorm(100), y=rnorm(100), z=letters[1:10])

让我们使用你的函数,看看我们在没有 plyr 的情况下得到了什么:
plotxy(df, main=.(z))

与可能更令人期待的(?):
plotxy(df, main=df$z)

但是,在您的代码中,您在 z 上拆分数据帧,然后再次将整个 data.frame df 发送到您的函数。相反,您可以创建一个包装函数:
d_ply(df, .(z), function(ply.df) plotxy(ply.df, main=unique(ply.df$z)))

这样 plotxy函数只看到您通过包装函数传递的较小的拆分 data.frame ply.df。

关于r - 从 d_ply 内部访问分组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586668/

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