Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的nansum用于数据表_R_Data.table_Nan - Fatal编程技术网

R中的nansum用于数据表

R中的nansum用于数据表,r,data.table,nan,R,Data.table,Nan,让我们从DT1开始 library(data.table) DT1 <- data.table(c(NA, NA, NA, NA, NA), c(1, 1, 1, 1, NA), c(1, 1, 1, 1, NA)) # 1: NA 1 1 # 2: NA 1 1 # 3: NA 1 1 # 4: NA 1 1 # 5: NA NA NA 一个选项是Map setDT(Map(function(x,y

让我们从DT1开始

library(data.table)
DT1 <- data.table(c(NA, NA, NA, NA, NA),
                  c(1, 1, 1, 1, NA),
                  c(1, 1, 1, 1, NA))
# 1: NA  1  1
# 2: NA  1  1
# 3: NA  1  1
# 4: NA  1  1
# 5: NA NA NA

一个选项是
Map

setDT(Map(function(x,y) {x1 <- rowSums(cbind(x,y), na.rm  = TRUE)
           x1[is.na(x) & is.na(y)] <- NA
            x1}, DT1, DT2))[]
#   V1 V2 V3
#1: NA  3  3
#2: NA  3  3
#3: NA  3  3
#4: NA  3  3
#5: NA  2  2

setDT(映射(函数x,y){x1您确定要将此数据存储为
数据.table
/
数据.frame
而不是矩阵吗?我使用data.table是因为我以前必须做一些繁重的操作,但我不介意对该部分使用矩阵。为什么繁重操作的结果不会产生
0
而不是
NA
?在我的上下文中,
0
NA
必须是不同的,但是当我组合它们时,我必须使用上面的总和还有一件更不幸的事:
sum(rep(NA,4),NA.rm=TRUE)
0
。我不知道我们如何在没有对数据进行更多健壮性检查的情况下绕过这个汇合点。很好。
是.NA(x)&is.NA(y)
是我用来固定
sum(NA,NA.rm=TRUE)==0
的同一种“管道胶带”…但我们不认为我们真的可以绕过它。与
cbind
rowSums
类似,我们可以
rbind
rowsum
(…这些函数名不太好…)
DT=rbind(DT1[,r:=.I],DT2[,r:=.I])[,rowsum(as.matrix(.SD),r,na.rm=TRUE)]
。但是,这会返回一个矩阵(这可能是OP应该使用的矩阵)。
# 1: NA  3  3
# 2: NA  3  3
# 3: NA  3  3
# 4: NA  3  3
# 5: NA  2  2
setDT(Map(function(x,y) {x1 <- rowSums(cbind(x,y), na.rm  = TRUE)
           x1[is.na(x) & is.na(y)] <- NA
            x1}, DT1, DT2))[]
#   V1 V2 V3
#1: NA  3  3
#2: NA  3  3
#3: NA  3  3
#4: NA  3  3
#5: NA  2  2