NA + 0 = 0,NA + 1 = 1,NA + NA = R 中的 NA
NA + 0 = 0, NA + 1 = 1, NA + NA = NA in R
我有一个包含一些 NA 的数据框,如下所示:
set.seed(1)
M<-matrix(sample(0:1,100,replace=TRUE),ncol=10)
M <- as.data.frame(M)
M[3,1]<-NA
M[10,5]<-NA
M[10,6]<-NA
M[8,10]<-NA
我想对每两列求和如下:
M_final = M[c(真,假)]+M[c(假,真)]
但我只想在添加两个 NA 时在 M_final 中添加 NA。所以我希望输出为:
V1 V3 V5 V7 V9
1 0 1 2 1 1
2 1 1 1 2 1
3 0 0 1 1 1
4 0 1 2 1 1
5 1 0 1 1 0
6 1 0 1 2 1
7 1 2 2 2 0
8 1 0 2 0 1
9 2 1 1 1 1
10 1 2 NA 2 1
有什么想法吗??
谢谢!!
您可以编写自定义函数来处理此问题。
add_NA <- function(x, y) ifelse(is.na(x) & is.na(y), NA, rowSums(cbind(x, y), na.rm = TRUE))
使用mapply
成对应用
mapply(add_NA, M[c(TRUE,FALSE)], M[c(FALSE,TRUE)])
#. V1 V3 V5 V7 V9
# [1,] 0 1 2 1 1
# [2,] 1 1 1 2 1
# [3,] 0 0 1 1 1
# [4,] 0 1 2 1 1
# [5,] 1 0 1 1 0
# [6,] 1 0 1 2 1
# [7,] 1 2 2 2 0
# [8,] 1 0 2 0 1
# [9,] 2 1 1 1 1
#[10,] 1 2 NA 2 1
我有一个包含一些 NA 的数据框,如下所示:
set.seed(1)
M<-matrix(sample(0:1,100,replace=TRUE),ncol=10)
M <- as.data.frame(M)
M[3,1]<-NA
M[10,5]<-NA
M[10,6]<-NA
M[8,10]<-NA
我想对每两列求和如下: M_final = M[c(真,假)]+M[c(假,真)]
但我只想在添加两个 NA 时在 M_final 中添加 NA。所以我希望输出为:
V1 V3 V5 V7 V9
1 0 1 2 1 1
2 1 1 1 2 1
3 0 0 1 1 1
4 0 1 2 1 1
5 1 0 1 1 0
6 1 0 1 2 1
7 1 2 2 2 0
8 1 0 2 0 1
9 2 1 1 1 1
10 1 2 NA 2 1
有什么想法吗?? 谢谢!!
您可以编写自定义函数来处理此问题。
add_NA <- function(x, y) ifelse(is.na(x) & is.na(y), NA, rowSums(cbind(x, y), na.rm = TRUE))
使用mapply
成对应用
mapply(add_NA, M[c(TRUE,FALSE)], M[c(FALSE,TRUE)])
#. V1 V3 V5 V7 V9
# [1,] 0 1 2 1 1
# [2,] 1 1 1 2 1
# [3,] 0 0 1 1 1
# [4,] 0 1 2 1 1
# [5,] 1 0 1 1 0
# [6,] 1 0 1 2 1
# [7,] 1 2 2 2 0
# [8,] 1 0 2 0 1
# [9,] 2 1 1 1 1
#[10,] 1 2 NA 2 1