将100 x 100矩阵转换为100 x 1矩阵/矢量/数据帧保留列/行标签组合

时间:2016-05-11 19:46:14

标签: r

我想要实现的目标部分由unlist()正确完成。但是,我希望保留行名和列名。 unmatrix() 会这样做,但反之亦然。因此,如果我的 df 如下:

      User1 User2 User3
Time1 1.5   2.5   3.5
Time2 7.8   9.2   10
Time3 4.5   8.8   1.4

我想收到的是:

User1:Time1 1.5
User1:Time2 7.8
User1:Time3 4.5
User2:Time1 2.5
User2:Time2 9.2
User2:Time3 8.8
User3:Time1 3.5
User3:Time2 10
User3:Time3 1.4

当我使用unlist()时,它只保留列名,但不保留行名。有没有其他方法可以做到这一点? **unmatrix()**完全按我要做的做,但不是给我User1:Time1,它给了我Time1:User1,即不给我column.name:row.name它给了我row.name:column .NAME

#### EDIT ####

unmatrix(t(as.matrix(df)))做正确的事,但是元素的顺序不是我想要的。

2 个答案:

答案 0 :(得分:0)

你几乎就在那里,只需在sort()之后names()使用unmatrix()

library(gdata)
um <- unmatrix(t(as.matrix(df)))
um[sort(names(um))]
User1:Time1 User1:Time2 User1:Time3 User2:Time1 User2:Time2 User2:Time3 User3:Time1 User3:Time2 User3:Time3 
    1.5         7.8         4.5         2.5         9.2         8.8         3.5        10.0         1.4 

答案 1 :(得分:0)

使用dplyr,reshape2稍微长一点

tbl <- read.table( row.names=NULL, text=
"User1 User2 User3
Time1 1.5   2.5   3.5
Time2 7.8   9.2   10
Time3 4.5   8.8   1.4
")
names(tbl)[1] <- "label"
require(dplyr, reshape2)                 
result <- tbl %>% 
  melt() %>% 
  mutate(label=paste0(label, ":", variable), value=value) %>%
  select (-variable)
result

        label value
1 Time1:User1   1.5
2 Time2:User1   7.8
3 Time3:User1   4.5
4 Time1:User2   2.5
5 Time2:User2   9.2
6 Time3:User2   8.8
7 Time1:User3   3.5
8 Time2:User3  10.0
9 Time3:User3   1.4