【发布时间】:2012-12-18 19:57:58
【问题描述】:
是否可以在同一个语句中更新超过 1 列的 data.table?
类似
dt[,onecol:=1 anothercol:=2]
我看过一些例子
dt[,c("onecol","anothercol"):=1]
但我不知道如何为每一列分配不同的公式
【问题讨论】:
标签: r data.table
是否可以在同一个语句中更新超过 1 列的 data.table?
类似
dt[,onecol:=1 anothercol:=2]
我看过一些例子
dt[,c("onecol","anothercol"):=1]
但我不知道如何为每一列分配不同的公式
【问题讨论】:
标签: r data.table
是的,从 1.8.4 版本开始就可以做到这一点:
library(data.table)
dt <- data.table(a=1:4, b=4:1)
dt[,c("a", "b") := list(min(a), max(b))]
# dt
# a b
# 1: 1 4
# 2: 1 4
# 3: 1 4
# 4: 1 4
或者,以更易读的方式做同样的事情:
dt <- data.table(a=1:4, b=4:1)
dt[,`:=`(a = min(a),
b = max(a))]
dt
# a b
# 1: 1 4
# 2: 1 4
# 3: 1 4
# 4: 1 4
在 the current data.table NEWS file 中搜索“多个 LHS”,看看这也适用于 by= 参数。
【讨论】:
?":=" 帮助页面在描述:= 可以做什么时有点过时了。它的“示例”部分不包含此处显示的语法示例,“参数”部分暗示这仅在 with=FALSE 时有效。