2014-02-12 24 views
5

如果我有一个data.table,并且我在j中执行一些函数调用,我可以访问by变量的当前值吗?在data.table中访问'j`内的'by`变量

library(data.table) 
d <- data.table(x=1:10, y=c('a', 'b')) 

myfun <- function(DT) { 
    print (DT$y) 
} 


d[, myfun(.SD), by=y] 

更多情况下,我传递第二个参数(另一data.table)至myfun并希望子集的基础上y当前值。它可以用一个虚拟变量来实现,但似乎令人讨厌......

+0

你可以使用'.GRP'吗? 'd [,.GRP,by = y]' – Roland

+1

@Roland嗯,我不知道'.GRP',但它只是一个索引是否正确?我可以,但是我开始添加额外的子集。 – Justin

+0

将其他data.table中的相应列转换为整数应该相对容易。但是,也许有一个更好的方法来解决你的真实问题。你需要展示它。 – Roland

回答

8

使用.BY - 这是by变量的列表:

d <- data.table(x=1:10, y=c('a', 'b')) 
d[, .BY[[1]], by = y] # [[1]] to access the first by variable, which is y 
         # if you had by = list(x, y) you'd do .BY[[2]] to access y 
# y V1 
#1: a a 
#2: b b 

此外,该名单被命名,所以你也可以访问它按名称:

d[, .BY$y, by = y] 
+0

这很好,但是如果你写一个函数,你必须明确地传递它,对吗? – Arun

+0

@阿伦,这是正确的 – eddi