如何使用R将多列堆叠成一列[重复]
Posted
技术标签:
【中文标题】如何使用R将多列堆叠成一列[重复]【英文标题】:How to stack multiple columns into one using R [duplicate] 【发布时间】:2021-12-14 19:44:59 【问题描述】:我有以下数据框:
A <- c(3,5,6,7)
B <- c(2,4,5,3)
C <- c(4,6,7,8)
D <- c(2,4,5,3)
gene <- c(1,2,3,4)
df <- data.frame(gene,A,B,C,D)
df
gene A B C D
1 1 3 2 4 2
2 2 5 4 6 4
3 3 6 5 7 5
4 4 7 3 8 3
如何将每个字母列堆叠到一个名为“count”的新列中,以便有另一个名为“sample”的新列跟踪每个计数值来自的原始列(即,我想要以下输出):
count sample
3 A
5 A
6 A
7 A
2 B
4 B
5 B
3 B
4 C
6 C
7 C
8 C
2 D
4 D
5 D
3 D
对不起,这很难解释,但上面的输出数据框应该清楚了。
谢谢
【问题讨论】:
【参考方案1】:在base R
中,删除第一列后使用stack
out <- stack(df[-1])
names(out) <- c("count", "sample")
【讨论】:
【参考方案2】:我们可以使用pivot_longer
:
library(tidyr)
library(dplyr)
df %>%
pivot_longer(
cols = -gene,
names_to = "sample",
values_to = "count"
) %>%
select(-gene) %>%
arrange(sample)
sample count
<chr> <dbl>
1 A 3
2 A 5
3 A 6
4 A 7
5 B 2
6 B 4
7 B 5
8 B 3
9 C 4
10 C 6
11 C 7
12 C 8
13 D 2
14 D 4
15 D 5
16 D 3
【讨论】:
以上是关于如何使用R将多列堆叠成一列[重复]的主要内容,如果未能解决你的问题,请参考以下文章