2017-03-24 112 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]