gpt4 book ai didi

r - 基于单一条件高效更新多个data.table列

转载 作者:行者123 更新时间:2023-12-04 16:30:52 26 4
gpt4 key购买 nike

这是我需要的一个简单示例:

data <- data.table(x = c(10, -10, 20, -20, 100, -100),
y = c(10, -10, 120, -120, 100, -100),
z = c(10, -10, 100, -100, 30, -30))

data[x > 90 | x < -90, x:=0]
data[z > 90 | z < -90, z:=0]

这很好用,但我希望用更简单的版本替换最后两行,因为我的实际数据中有很多列(大约 200,其中我需要更新大约 50)和很多行数(大约200万行,所以数据量有点大)

抱歉,如果这是重复的

最佳答案

eval(parse(...)) 可能是最简单和最有效的:

cols <- c("x", "z")
for (col in cols)
eval(parse(text = sprintf("data[%s > 90 | %s < -90, %s := 0][]", col, col, col)))
# x y z
#1: 10 10 10
#2: -10 -10 -10
#3: 20 120 0
#4: -20 -120 0
#5: 0 100 30
#6: 0 -100 -30

但是,我可能会融化 data.table:

data <- melt(data)
cols <- c("x", "z")
data[variable %in% cols & (value > 90 | value < -90), value := 0]
# variable value
# 1: x 10
# 2: x -10
# 3: x 20
# 4: x -20
# 5: x 0
# 6: x 0
# 7: y 10
# 8: y -10
# 9: y 120
#10: y -120
#11: y 100
#12: y -100
#13: z 10
#14: z -10
#15: z 0
#16: z 0
#17: z 30
#18: z -30

关于r - 基于单一条件高效更新多个data.table列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786896/

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