我将尝试在R中一行代码中完成多个步骤,以便通过多个条件从数据表(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
附加信息:
如何在不复制数据表的情况下对数据表进行排序,例如:
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"]
。你的例子很小,看起来好像可以在这里工作。 - Frank