【问题标题】:Reduce a matrix to a vector using tidyr in R [closed]使用 R 中的 tidyr 将矩阵简化为向量 [关闭]
【发布时间】:2016-09-04 12:12:06
【问题描述】:

我有 10 个 100x100 矩阵存储在一个列表 (raw_data) 中。我想逐行转换列向量中的每个矩阵,并将所有列绑定在一个数据框中。

基本上,对于每个矩阵 A

A <- matrix(c(1:6), nrow = 2, ncol = 3)

A
[[1, 2, 3],
 [4, 5, 6]]

和B

B <- matrix(c(7:12), nrow = 2, ncol = 3)

B
[[7, 8, 9],
 [10, 11, 12]]

我想获得一个数据框:

A, B
1, 7
2, 8
3, 9
4, 10
5, 11
6, 12

这是我目前正在使用的解决方案,

fun <- function(x) data.frame(as.vector(t(x), mode = "numeric"))    # Tidyr
var_data <- lapply(raw_data[variables], fun)    # Tidyr
var_df <- do.call(cbind, var_data)  # Tidyr
names(var_df) <- variables

但是它效率不高,我想改用 tidyr 之类的东西。有其他选择吗?

编辑: 列表 raw_data 如下: raw_data = list(A,B)

【问题讨论】:

  • 您的矩阵与您的“图片”不匹配

标签: r matrix dataframe


【解决方案1】:

我们可以使用matrix

matrix(unlist(raw_data), ncol=2, dimnames= list(NULL, c("A", "B")))
#    A  B
#[1,] 1  7
#[2,] 2  8
#[3,] 3  9
#[4,] 4 10
#[5,] 5 11
#[6,] 6 12

如果我们需要data.frame,请用as.data.frame 包装它

【讨论】:

    【解决方案2】:

    怎么样,

    as.data.frame(lapply(raw_data, c))
    #  X1.6 X7.12
    #1    1     7
    #2    2     8
    #3    3     9
    #4    4    10
    #5    5    11
    #6    6    12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多