gpt4 book ai didi

r - 使用 data.table 在单个条件下替换多列

转载 作者:行者123 更新时间:2023-12-03 21:21:40 25 4
gpt4 key购买 nike

我想将默认值(即 255)更改为 NA。

dt <- data.table(x = c(1,5,255,0,NA), y = c(1,7,255,0,0), z = c(4,2,7,8,255))
coords <- c('x', 'y')

这给出了以下代码:
     x   y   z
1: 1 1 4
2: 5 7 2
3: 255 255 7
4: 0 0 8
5: NA 0 255

我最想得到的是这个:
dt[.SD == 255, (.SD) := NA, .SDcols = coords]

请注意,z 列保持不变。所以只是指定的列而不是所有列。

但这并不能帮助我获得解决方案:
     x   y   z
1: 1 1 4
2: 5 7 2
3: NA NA 7
4: 0 0 8
5: NA 0 255

我正在寻找一个可持续的解决方案,因为原始数据集有几百万行。

编辑:

我找到了一个解决方案,但它非常难看,而且肯定太慢了,因为它需要将近 10 秒才能通过 22009 x 86 的数据帧。有人有更好的解决方案吗?

编码:
dt[, replace(.SD, .SD == 255, NA), .SDcols = coords, by = c(colnames(dt)[!colnames(dt) %in% coords])]

最佳答案

以下是如何将列保留在外面 .SDcols ,

library(data.table)
dt[, (coords) := replace(.SD, .SD == 255, NA), .SDcols = coords]

这使,

    x  y   z
1: 1 1 4
2: 5 7 2
3: NA NA 7
4: 0 0 8
5: NA 0 255

关于r - 使用 data.table 在单个条件下替换多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53282404/

25 4 0