gpt4 book ai didi

r - data.table 与另一列不同的一组列

转载 作者:行者123 更新时间:2023-12-04 10:50:59 25 4
gpt4 key购买 nike

我试图用 data.table 将一组列与另一列区分开来。这是一个简单的例子:

library(data.table)

dt <- data.table(a=1:10,b=11:20,d=21:30)
mycols <- c("b","d")
dt[,c(paste0("diff",mycols)):=lapply(mycols, function(x, env) get(x,env) - get("a",env), env=dt)]
dt
a b d diffb diffd
1: 1 11 21 10 20
2: 2 12 22 10 20
3: 3 13 23 10 20
4: 4 14 24 10 20
5: 5 15 25 10 20
6: 6 16 26 10 20
7: 7 17 27 10 20
8: 8 18 28 10 20
9: 9 19 29 10 20
10: 10 20 30 10 20

我的问题是 data.table 是否有更好的语法?问题是列“a”没有在函数范围内定义,所以我必须使用 get 来让它工作。

最佳答案

您可以使用 mycols 子集 .SD 并减去 a:

dt[, paste0("diff", mycols) := .SD[, mycols, with = FALSE] - a ]
# a b d diffb diffd
# 1: 1 11 21 10 20
# 2: 2 12 22 10 20
# 3: 3 13 23 10 20
# 4: 4 14 24 10 20
# 5: 5 15 25 10 20
# 6: 6 16 26 10 20
# 7: 7 17 27 10 20
# 8: 8 18 28 10 20
# 9: 9 19 29 10 20
#10: 10 20 30 10 20

正如 Frank 在评论中指出的,这也行得通

dt[, paste0("diff", mycols) := .SD - dt$a, .SDcols=mycols]

但不确定什么是更好的做法。

关于r - data.table 与另一列不同的一组列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35785270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com