2017-03-24 69 views
0

可能很简单。data.table SD which.mac与列名

我正在尝试使用Rdata.table.SD保留具有某个列的最大值的行。

这是我data.frame

set.seed(1) 
dt <- data.frame(id=LETTERS[sample(26,100,replace=T)],value=rnorm(100),stringsAsFactors=F) 

,这将是data.table代码:

require(data.table) 
dt <- setDT(df)[, .SD[which.max(value)],by=id] 

工作正常。

现在假设我不知道是什么值列的名称,而是我通过它作为一个参数: value.name < - “值”

,所以我想this'd工作:

dt <- setDT(df)[, .SD[which.max(value.name)],by=id] 

但它抛出的警告:

In which.max(value.name) : NAs introduced by coercion 

,并返回一个空data.table

有什么想法?

+2

尝试'setorderv(setDT(DF),value.name);独特(df,by =“id”,fromLast = TRUE)'。顺便说一句,像'df < - f(df)'覆盖你的df会造成一个恼人的例子,因为我们必须回到顶端并重新创建它来运行后续部分。另外,如果你要包装data.frame(),为什么你甚至使用data.table?你有没有注意到'setDF'函数呢? – Frank

回答

1

您可以使用get()

dt <- setDT(df)[, .SD[which.max(get(value.name))], by = id]