如何使用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将多列堆叠成一列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将多列“爆破”(反规范化/合并)成一列?

pb grid如何隐藏一列或多列

excel如何将多列数据(就比如4列)做成一条曲线 因为用2列太长了不好看

在EXCEL如何在同一表格多列名称中查找数据相对应的名称

excel中能否将一列数据分成多列?

sql查询 表中一列不重复 显示多列