【问题标题】:from list to matrix in rr中从列表到矩阵
【发布时间】:2021-03-19 18:12:18
【问题描述】:

这样的列表模拟了我的一些数据,其中机器学习算法根据输入特征在预测响应变量中的重要性对它们进行排序:

feature <- rep(c("a", "b", "c", "d", "e", "f"), 3)
run <- c(rep(1, 6), rep(2, 6), rep(3, 6))
rank <- c(1, 2, 3, 4, 5, 6, 1, 4, 2, 3, 6, 5, 1, 5, 3, 4, 2, 6)
testlist <- list(feature, run, rank)

我想得到一个只包含排名数据的矩阵,格式如下:

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

但是将批次转换为带有as.matrix() 的矩阵不会产生货物。我也尝试过dplyr::group_by() %&gt;% dplyr::pull(),但我仍然无法将rankrun 关联起来。

【问题讨论】:

  • matrix(testlist[[3]],ncol=3)
  • @maydin 不错。还有:matrix(testlist[[3]], ncol = length(testlist[[2]])/6)

标签: r list matrix dplyr


【解决方案1】:

要根据run 创建矩阵吗?

do.call(cbind, split(testlist[[3]], testlist[[2]]))

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

【讨论】:

  • 是的,我愿意,这很好用,谢谢,而且不会硬编码
【解决方案2】:

我们可以在base R中使用unstack

unstack(data.frame(a = testlist[[3]], b = testlist[[2]]), a ~ b)
#  X1 X2 X3
#1  1  1  1
#2  2  4  5
#3  3  2  3
#4  4  3  4
#5  5  6  2
#6  6  5  6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多