[英]Transform a matrix to two columns
我有一个包含三列的表格,如下所示
第 1 组 | 第 2 组 | 第 3 组 |
---|---|---|
1个 | 2个 | 3个 |
5个 | 21 | 32 |
10 | 32 | 50 |
12 | 20 | 60 |
我想将其转换为如下所示的矩阵
价值 | 团体 |
---|---|
1个 | 第 1 组 |
5个 | 第 1 组 |
10 | 第 1 组 |
12 | 第 1 组 |
2个 | 第 2 组 |
21 | 第 2 组 |
32 | 第 2 组 |
20 | 第 2 组 |
3个 | 第 3 组 |
32 | 第 3 组 |
50 | 第 3 组 |
60 | 第 3 组 |
我如何在 R 中执行此操作?
使用 base R,您可以使用:
> dt <- data.frame(Group1 = c(1,5,10,12), Group2 = c(2, 21, 32, 20), Group3 = c(3, 32, 50, 60))
> dt
Group1 Group2 Group3
1 1 2 3
2 5 21 32
3 10 32 50
4 12 20 60
> as.data.frame(cbind(unlist(dt, use.names = FALSE), rep(names(dt), each = nrow(dt))))
V1 V2
1 1 Group1
2 5 Group1
3 10 Group1
4 12 Group1
5 2 Group2
6 21 Group2
7 32 Group2
8 20 Group2
9 3 Group3
10 32 Group3
11 50 Group3
12 60 Group3
编辑:解决上面的V1
列是 class 字符的问题。 相反,如果这需要是数字,那么我们可以这样做:
dt1 <- as.data.frame(cbind(unlist(dt, use.names = FALSE), rep(names(dt), each = nrow(dt))))
dt1$V1 <- as.numeric(dt1$V1)
或者,简单地说:
stack(dt)
根据@markus 的评论
使用熔体:
library(data.table)
dat <- as.data.table(matrix)
melt(dat, measure.vars = names(dat))
另一种使用dplyr
的方法:
dat <- read.table(text = "Group1 Group2 Group3
1 2 3
5 21 32
10 32 50
12 20 60", header = TRUE)
dat
# Group1 Group2 Group3
# 1 1 2 3
# 2 5 21 32
# 3 10 32 50
# 4 12 20 60
newdat <- dat %>% pivot_longer(cols = 1:3,
names_to = "Group",
values_to = "Value") %>%
arrange(Group) %>%
relocate(Value)
newdat
# A tibble: 12 x 2
# Value Group
# <int> <chr>
# 1 1 Group1
# 2 5 Group1
# 3 10 Group1
# 4 12 Group1
# 5 2 Group2
# 6 21 Group2
# 7 32 Group2
# 8 20 Group2
# 9 3 Group3
# 10 32 Group3
# 11 50 Group3
# 12 60 Group3
随着tidyr
:
library(tidyr)
data%>%
gather(Value, Group) %>%
relocate(Value, .after = Group)
Output:
Group Value
1 1 Group1
2 5 Group1
3 10 Group1
4 12 Group1
5 2 Group2
6 21 Group2
7 32 Group2
8 20 Group2
9 3 Group3
10 32 Group3
11 50 Group3
12 60 Group3
样本数据:
data <- read.table(text = "Group1 Group2 Group3
1 2 3
5 21 32
10 32 50
12 20 60", header = TRUE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.