gpt4 book ai didi

在 R 中添加时删除 NA

转载 作者:行者123 更新时间:2023-12-02 15:29:21 26 4
gpt4 key购买 nike

我正在尝试在 R 中添加两个矩阵,我希望添加将任何 NA 视为 0。我知道我总是可以做这样的事情:

ifelse(is.na(A), 0, A) + ifelse(is.na(B), 0, B)

但似乎应该有一种更优雅的方式来做到这一点。例如,是否有某种方法可以为 + 函数提供 na.rm 参数?

最佳答案

假设“A”和“B”具有相同的维度,

`dim<-`(colSums(rbind(c(A), c(B)), na.rm=TRUE), dim(A))
# [,1] [,2] [,3] [,4]
#[1,] 4 7 6 6
#[2,] 5 7 2 4
#[3,] 8 9 6 1
#[4,] 4 2 5 5

或者我们可以使用replace代替ifelse,这样会更快一些

  replace(A, is.na(A), 0) +replace(B, is.na(B), 0)
# [,1] [,2] [,3] [,4]
#[1,] 4 7 6 6
#[2,] 5 7 2 4
#[3,] 8 9 6 1
#[4,] 4 2 5 5

或者如果有多个数据集,我们可以将它放在一个列表中并使用 Reduce

 Reduce(`+`, lapply(list(A,B), function(x) replace(x, is.na(x), 0)))

另一个紧凑的选择是使用 qdap

中的 NAer
library(qdap)
NAer(A)+NAer(B)

对于多个数据集

Reduce(`+`, lapply(list(A,B), NAer))

数据

set.seed(324)
A <- matrix(sample(c(NA,1:5), 4*4, replace=TRUE), ncol=4)
set.seed(59)
B <- matrix(sample(c(NA,1:5), 4*4, replace=TRUE), ncol=4)

关于在 R 中添加时删除 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626610/

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