我想要实现的目标部分由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)))
做正确的事,但是元素的顺序不是我想要的。
答案 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