【问题标题】:How to stack multiple columns into one using R [duplicate]如何使用R将多列堆叠成一列[重复]
【发布时间】: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

对不起,这很难解释,但上面的输出数据框应该清楚了。

谢谢

【问题讨论】:

    标签: r


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2013-04-01
        • 2016-02-27
        • 2019-08-22
        • 2020-02-06
        • 2020-01-05
        • 1970-01-01
        • 2020-11-09
        • 2012-11-15
        • 2020-01-02
        相关资源
        最近更新 更多