【问题标题】:data.table SD which.max with a column namedata.table SD which.max 带有列名
【发布时间】: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 &lt;- f(df) 这样覆盖你的 df 是一个烦人的例子,因为我们必须回到顶部并重新创建它以运行后续部分。另外,如果你要包装 data.frame(),你为什么还要使用 data.table?你注意到setDF 功能了吗?

标签: r dataframe data.table


【解决方案1】:

您可以使用get()

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

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 2015-06-16
    相关资源
    最近更新 更多