【问题标题】:Retrieve the non-zero values from array in R从R中的数组中检索非零值
【发布时间】:2018-01-13 22:32:37
【问题描述】:

我在 R 中有一个大小为 31x36 的数组,称为 input_matrix。在该矩阵的每一行中,有 16 个非零值和 20 个零值。每一行的非零值和零值的索引是不同的。我想检索一个大小为 31x16 的矩阵 output_matrix 作为我系统的最终输出,其中包含唯一的非零值。单行示例,如果我有:

5 0 4 0 4 0 1 0 0 0 .. 1

我要检索:(5 4 4 1 ... 1)。我如何在 R 中这样做?

【问题讨论】:

  • 基本上与Adding non-zero elements of a matrix in R 重复。你只想要m[m != 0]
  • 我假设你想保持数字的顺序不变?
  • 对于非零计数小于 16 的行是否应该有“填充”(可能是 NA's)?
  • @snoram 是的,顺序必须相同。
  • 如果每行中非零项目的数量不同,那么您无法将其映射为规则排列,而无需在每行的末尾或开头进行填充。多个 cmets 表明您的问题不清楚,因为没有示例数据对象,所以不清楚。

标签: r matrix


【解决方案1】:

reproducible example 开头总是好的。所以这里有一个:

# Create a matrix per the description
# fill first with random integers
input_matrix <- matrix(sample(1:9, size = 31L*36L, replace = TRUE), nrow = 31)
# Now add 20 zero value to each row randomly
for (i in 1:nrow(input_matrix)) {
  input_matrix[i, sample(1:36, size = 20)] <- 0L
} 

解决方案 1

t(apply(input_matrix, 1, function(x) x[x != 0]))

解决方案 2(简化版)

matrix(t(input_matrix)[t(input_matrix) != 0], nrow = 31, byrow = TRUE)

【讨论】:

  • 解决方案 2 更快,可以说更优雅。
猜你喜欢
  • 2019-05-04
  • 2021-04-04
  • 1970-01-01
  • 2011-07-08
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
相关资源
最近更新 更多