将宽幅矩阵转换为R中的长形矩阵(可能带有reshape2和melt)

时间:2016-02-02 00:40:40

标签: r reshape reshape2

我有一个看起来(结构上)像这样的矩阵:

     id            1st         2nd          3rd        4th         5th
[1,] "aaaaa1"      "Tesco"     "Sainsbury"  "M&S"      "Waitrose"  "Asda"
[2,] "bbbbb2"      "Sainsbury" "Tesco"      "Waitrose" "Asda"      "M&S"

我需要把它变成:

     id            shop
[1,] "aaaaa1"      "Tesco"
[2,] "aaaaa1"      "Sainsbury"
[3,] "aaaaa1"      "M&S"
[4,] "aaaaa1"      "Waitrose"
[5,] "aaaaa1"      "Asda"
[6,] "bbbbb2"      "Sainsbury"
[7,] "bbbbb2"      "Tesco" (ETC.)

我不能为我的生活提出一个不涉及循环的简单解决方案,但我知道它应该是直截了当的。

我尝试了以下方法,但它根本不起作用:

library(reshape2)
meltedPredictionsMatrix = melt(widePredictionsMatrix, id.vars="id")

我觉得可能有一个更简单的解决方案,不需要包装,但我被卡住了。

1 个答案:

答案 0 :(得分:0)

如果预期输出为matrix,则cbind初始矩阵的第一列(复制后)与其他列,然后order第一列(a {{1}选项)。

base R

如果我们想要 res <- cbind(id= m1[,1][row(m1[,-1])], shop=c(m1[,-1])) res[order(res[,1]),] # id shop #[1,] "aaaaa1" "Tesco" #[2,] "aaaaa1" "Sainsbury" #[3,] "aaaaa1" "M&S" #[4,] "aaaaa1" "Waitrose" #[5,] "aaaaa1" "Asda" #[6,] "bbbbb2" "Sainsbury" #[7,] "bbbbb2" "Tesco" #[8,] "bbbbb2" "Waitrose" #[9,] "bbbbb2" "Asda" #[10,] "bbbbb2" "M&S" 作为输出,转换为data.frame后可以使用melt

data.frame