从d_ply中访问分组变量

时间:2012-05-14 15:46:46

标签: r plyr

我刚刚发现了一个很棒的plyr包,我正在接受它。

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

假设我的数据框df包含x,y,z列,并且我想为每个zxy进行关系。如果我执行以下操作:

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

然后显示在图上的标题都是" z",而不是z变量的值。有没有办法从d_ply内访问这些值?

编辑:正如@Justin指出的那样,上面的提法是错误的,因为我将整个df传递给plotxy。因此行

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

应该是

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

为了理解我原来的问题(我想这也是@joran所暗示的)。

然而,我意识到了其他一些事情。即使dfz d_ply切成z,但该函数收到的子数据框仍然有一个plotxy = function(df, ...) {plot(df$x, df$y, main=df$z[1])} d_ply(df, .(z), plotxy) 列 - 只是始终具有相同的值。因此,问题显然可以解决如下:

{{1}}

1 个答案:

答案 0 :(得分:5)

举例来说,我将扩展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函数只能看到你通过包装函数传递的较小的split data.frame ply.df。