我刚刚发现了一个很棒的plyr
包,我正在接受它。
我遇到的问题如下:是否有某种方法可以从d_ply
中访问分组变量?
假设我的数据框df
包含x,y,z
列,并且我想为每个z
值x
与y
进行关系。如果我执行以下操作:
plotxy = function(df, ...) {plot(df$x, df$y, ...)}
d_ply(df, .(z), plotxy(df, main=.(z)))
然后显示在图上的标题都是" z",而不是z变量的值。有没有办法从d_ply
内访问这些值?
df
传递给plotxy
。因此行
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)
列 - 只是始终具有相同的值。因此,问题显然可以解决如下:
{{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。