【问题标题】:How to produce a matrix with two values per colums in R如何在R中生成每列有两个值的矩阵
【发布时间】:2018-01-29 16:46:33
【问题描述】:

我有两个矩阵

means16 <- matrix(nrow = 4, ncol = 6)
median16 <- matrix(nrow = 4, ncol = 6)

其中包含不同产品价格的平均值和中值。我想像这样组合它们:

               range1        range2        range3         range4         range5          range6
            mean  median  mean  median  mean  median   mean  median   mean  median    mean  median
Product1    
Product2
Product3
Product4

如何为每一列插入第二层以提供均值和中值的空间?

干杯,

【问题讨论】:

  • 由于某些原因,即使在编辑后也没有显示“你好”。所以,你好,谢谢你的帮助。

标签: r matrix combinations multiple-columns


【解决方案1】:

如果只想一起显示,可以直接使用paste0:

means16 <- matrix(data = sample(1:10,6*4,replace = T),nrow = 4, ncol = 6)
median16 <- matrix(data = sample(1:10,6*4,replace = T),nrow = 4, ncol = 6)
matrix(paste0(means16," - ",median16), nrow = 4, ncol = 6)
     [,1]     [,2]     [,3]    [,4]     [,5]     [,6]    
[1,] "5 - 3"  "5 - 1"  "2 - 4" "8 - 9"  "10 - 9" "2 - 6" 
[2,] "10 - 3" "1 - 2"  "3 - 6" "5 - 3"  "2 - 6"  "7 - 6" 
[3,] "9 - 9"  "5 - 10" "9 - 6" "10 - 4" "7 - 5"  "7 - 8" 
[4,] "3 - 9"  "7 - 9"  "2 - 4" "6 - 2"  "7 - 1"  "10 - 3"

【讨论】:

    【解决方案2】:

    不这样做的原因有很多,但您可以将矩阵分配给数据框中的列:

    means16 <- matrix(data = sample(1:10, 6*4, replace = T),
         nrow = 4, ncol = 6)
    medians16 <- matrix(data = sample(1:10, 6*4, replace = T),
         nrow = 4, ncol = 6)
    

    我们需要一个包含 6 个 2 列矩阵的列表(每个范围一个):

    pairs <- lapply(1:6, function(x) cbind(means16[, x],
         medians16[, x]))
    names(pairs) <- paste0("range", 1:6)
    for (i in 1:6) colnames(pairs[[i]]) <- c("mean", "median")
    

    现在我们将这些 2 列矩阵放入一个数据框中:

    new <- data.frame(matrix(NA, 4, 6))
    names(new) <- paste0("range", 1:6)
    for (i in 1:6) new[, i] <- pairs[[i]]
    str(new)
    

    您将看到 range1 到 range6 列均由一个 2 列矩阵组成,列名为“mean”和“median”。这种数据结构将很难使用。在不知道您打算如何使用它的情况下,不清楚是否值得付出努力。

    【讨论】:

    • 为什么不推荐这种展示方式?下一步是计算两年间平均值和中位数的差异。
    • 在每个矩阵中指定单独的列很复杂,这样更容易出错。命名单独的列 new$range1.mn 和 new$range1.md 比指定 new$range1[, "mean"] 和 new$range1[, "median"] 更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多