【发布时间】:2015-06-02 20:54:33
【问题描述】:
我试图在 R 中的一行中执行多个步骤,以从具有多个条件的 data.table (dt) 中选择一个值。
例如:
set.seed(123)
dt <- data.table(id = rep(letters[1:2],2),
time = rnorm(4),
value = rnorm(4)*100)
# id time value
# 1: a -0.56047565 12.92877
# 2: b -0.23017749 171.50650
# 3: a 1.55870831 46.09162
# 4: b 0.07050839 -126.50612
# Now I want to select the last (maximum time) value from id == "a"
# My pseudo data.table code looks like this
dt[order(time) & id == "a" & .N, value]
# [1] 12.92877 46.09162
我不想获取两个值,而是只获取最后一个值(具有更高的时间值)。
如果我一步一步做,它会起作用:
dt <- dt[order(time) & id == "a"]
dt[.N, value]
# [1] 46.09162
奖励:
如何在不复制 data.table 的情况下订购 data.table:即
dt <- dt[order(time)]
没有<-。类似于:=-运算符,例如dt[, new_val := value*2],它创建新变量而不复制整个data.table。
谢谢,任何想法都非常感谢!
【问题讨论】:
-
你说
dt[order(time) & id == "a"]有效,但是order给出的是一个整数,而不是一个逻辑,并且被简单地强制转换为TRUE,所以这相当于dt[TRUE & id=="a"]或dt[id=="a"]。您的示例是如此之小,以至于它看起来像它可以在这里工作。
标签: r data.table