用矩阵中的列表替换奇异值

标签 r matrix replace

给定矩阵

test <- structure(list(X1 = c(3L, 0L, 3L, 1L, 2L, 2L, 1L, 2L, 2L, 3L), 
X2 = c(2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), X3 = c(0L, 
0L, 3L, 0L, 2L, 2L, 3L, 0L, 0L, 2L), X4 = c(1L, 1L, 1L, 0L, 
3L, 1L, 3L, 1L, 1L, 1L), X5 = c(3L, 3L, 1L, 3L, 1L, 3L, 2L, 
3L, 3L, 3L), X6 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L
), X7 = c(2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L), X8 = c(3L, 
0L, 1L, 0L, 1L, 1L, 3L, 0L, 0L, 1L), X9 = c(3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L)), .Names = c("X1", "X2", "X3", "X4", 
"X5", "X6", "X7", "X8", "X9"), row.names = c("1", "2", "3", "4", 
"5", "6", "7", "8", "9", "10"), class = "data.frame")
我试图用数字序列 c(0,0,1), 2 by c(0,1,0), 3 by (1,0,1) 和 0 by (0,0,0)。矩阵中的每个值都应替换为这些三个二进制值序列之一。 nrow结果矩阵的 应该是 nrow(test) * 3 .显然我试图使用索引 test[test == 1] <- c(0,0,1)但这会返回错误 rhs is the wrong length for indexing by a logical matrix .替换功能在这里似乎也不起作用,返回相同的错误消息。任何的想法?

最佳答案

由于结果的维度不同(3维数组而不是2维矩阵),不能一一替换元素。

您可以使用 apply : if 常用于对矩阵的每一列或每一行应用一个函数,但我们也可以用它对每个元素应用一个函数。

apply( 
  test, 
  1:2, 
  function(u) list(c(0,0,0), c(0,0,1), c(0,1,0), c(1,0,1))[[u+1]] 
)

关于用矩阵中的列表替换奇异值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791654/

相关文章:

c# - 如何将字符串中的 [city] 替换为 [City]

r - 使用 ggplot 隐藏图例

r - 在 R 的数据框中查找相似的行(不重复)

r Markdown 输出到 pdf : stop plot breaking up a code chunk

javascript - 如何使数据表省略插件与完整数据下载按钮一起使用?

R - 用一个矩阵总结另一个矩阵

r - 如何改进 R 中 for 循环中的简单减法?

jquery - 替换元素中的内容而不替换 HTML

c++ - 从 C++ 中的函数返回继承类的最佳方法

javascript - 替换一些 "\n"不起作用