gpt4 book ai didi

r - data.table 用 NA 替换一个值

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

这个问题在这里已经有了答案:





R data.table multi column recode/sub-assign [duplicate]

(1 个回答)


6年前关闭。




我要换 0来自 NAdata.table 的每一列中.

library(data.table)
dt1 <- data.table(V1=0:2, V2=2:0)
dt1

V1 V2
1: 0 2
2: 1 1
3: 2 0

dt1==0
V1 V2
[1,] TRUE FALSE
[2,] FALSE FALSE
[3,] FALSE TRUE

我试过这个
dt1[dt1==0] 
Error in `[.data.table`(dt1, dt1 == 0) :
i is invalid type (matrix). Perhaps in future a 2 column matrix could return a list of elements of DT (in the spirit of A[B] in FAQ 2.14). Please let datatable-help know if you'd like this, or add your comments to FR #1611.

也试过这个
dt1[dt1==0, .SD :=NA] 

已编辑

部分 sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: i686-pc-linux-gnu (32-bit)
Running under: Ubuntu 14.04.2 LTS

data.table_1.9.4

最佳答案

你可以试试set对于多列。随着.[data.table的开销,它会更快被避免

for(j in seq_along(dt1)){
set(dt1, i=which(dt1[[j]]==0), j=j, value=NA)
}
dt1
# V1 V2
#1: NA 2
#2: 1 1
#3: 2 NA

或者另一种选择是循环使用 lapply然后更改 0值到 NA 与 replace
dt1[, lapply(.SD, function(x) replace(x, which(x==0), NA))]

或者我们可以利用一些算术运算将 0 值转换为 NA。
 dt1[, lapply(.SD, function(x) (NA^!x) *x)]

方式 (NA^!x)*x这个作品是通过转换 !x即每列的逻辑 TRUE/FALSE 向量(其中 TRUE 对应于 0 值)到 NA和 1 通过做 NA^!x .我们乘以 x 值以将 1 替换为与其对应的 x 值,而 NA 将保持不变。

或者类似 base R 的语法将是
  is.na(dt1) <- dt1==0

但是这种方法对于大数据表可能不是那么有效。如 dt1==0将是一个逻辑矩阵,也正如@Roland 在评论中提到的数据集将被复制。我要么使用 lapply基于或更高效的 set对于更大的数据集。

关于r - data.table 用 NA 替换一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31761731/

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