如何在自定义plyr函数中获取分组变量的值?

时间:2015-01-23 11:46:52

标签: r plyr

说我有,

data.frame(foo=c(1,1,2,2), bar=c(1,2,3,4))

那是:

foo bar
  1   1
  1   2
  2   3
  2   4

我可以跑:

ddply(data, .(foo), function(df) {
   print(df$bar) # => [1] 1 2
                 # => [1] 3 4
   print(foo)    # Error: object 'foo' not found
})

但我也知道foo在函数内总是12。如何在不诉诸foo的情况下获取此变量foo = unique(df$foo)

1 个答案:

答案 0 :(得分:2)

这实际上是一个很好的问题,我不知道plyr是否可以这样做,但在data.table中你有一个特殊的方法.BY

例如

library(data.table)
setDT(data)[, .BY[1], foo]
#    foo foo
# 1:   1   1
# 2:   2   2

或者

setDT(data)[, print(.BY[1]), foo]
# $foo
# [1] 1
# 
# $foo
# [1] 2

或者

setDT(data)[, c(.BY[1], bar), foo]
#    foo foo    
# 1:   1   1 1 2
# 2:   2   2 3 4