【发布时间】:2017-03-24 22:32:22
【问题描述】:
可能很简单。
我正在尝试使用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
所以我认为这是可行的:
dt <- setDT(df)[, .SD[which.max(value.name)],by=id]
但它会发出警告:
In which.max(value.name) : NAs introduced by coercion
并返回一个空的data.table。
有什么想法吗?
【问题讨论】:
-
试试
setorderv(setDT(df), value.name); unique(df, by="id", fromLast=TRUE)。顺便说一句,像df <- f(df)这样覆盖你的 df 是一个烦人的例子,因为我们必须回到顶部并重新创建它以运行后续部分。另外,如果你要包装 data.frame(),你为什么还要使用 data.table?你注意到setDF功能了吗?
标签: r dataframe data.table