r - 用向量(条件)对矩阵的值进行子集化

标签 r extract subset extraction

我有以下矩阵:

>  matrix <- matrix(c(1,3,4,NA,NA,NA,3,0,4,6,0,NA,2,NA,NA,2,0,1,0,0), nrow=5,ncol=4)
> n <- matrix(c(1,2,5,6,2),nrow=5,ncol=1)

如你所见,对于每一行我都有

  1. 多个 NA - NA 的数量未定义
  2. 一个“0”

我想将 0 作为 n 的值的子集。预期输出如下。

> output <- matrix(c(1, 3, 4,NA,NA,NA,3,5,4,6,1,NA,2,NA,NA,2,2,1,6,2), nrow=5,ncol=4)

我试过以下方法

subset <- matrix == 0 & !is.na(matrix)
matrix[subset] <- n
#does not give intended output, but subset locates the values i want to change

在我的“真实”数据上使用时,我收到以下消息:

Warning message: In m[subset] <- n : number of items to replace is not a multiple of replacement length

谢谢

编辑:在矩阵中添加一行,因为我现实生活中的问题是矩阵不平衡。我在这里使用矩阵而不是 DF,因为我认为(不确定)对于非常大的数据集,R 对于大矩阵而不是数据帧的子集更快。

最佳答案

我们可以使用

out1 <- matrix+n[row(matrix)]*(matrix==0)
identical(output, out1)
#[1] TRUE

关于r - 用向量(条件)对矩阵的值进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42650747/

相关文章:

javascript - 将数据动态加载到 rmarkdown html 输出中

regex - 语言环境何时会影响 R 的正则表达式?

Roxygen 认为我的功能是 S3 方法,因此在安装我的包时中断

php - 我可以提取函数返回值吗?

r - 手工编写 BFS 搜索算法

matlab - 从 MATLAB 中的 ezplot 提取数据

R-创建按列名称选择数据框中整行的函数

algorithm - 给定一个整数数组,找到最接近 K 的子集和

r - 在数据框中查找 ID 的子 ID 的函数

php - 使用命名空间从 XML 中提取数据