【问题标题】:Concatenate multiple columns into one with dplyr使用 dplyr 将多列连接为一列
【发布时间】:2019-07-28 06:03:25
【问题描述】:

我有一个像这样结构的 df,但是有大量的列和行:

 A   B   C   D 
 1   4   3   3

我想获得一个单列的 df,由所有先前元素的串联组成:

 A
 1
 B
 4
 C
 3
 D
 3

我该怎么办? 如果解决方案包含使用 dplyr 会更好。

【问题讨论】:

  • unlist 怎么样?
  • ABCD 列名吗?

标签: r concatenation


【解决方案1】:

unlist 并将其包裹在 data.frame

data.frame(col = unlist(df), row.names = NULL)

#  col
#1   A
#2   1
#3   B
#4   4
#5   C
#6   3
#7   D
#8   3

或将其设为tibble

library(tibble)
tibble(col = unlist(df))

#   col  
#  <fct>
#1   A    
#2   1    
#3   B    
#4   4    
#5   C    
#6   3    
#7   D    
#8   3    

@Sotos 提到的另一个选项是 stack,但它需要类字符列

df[] <- lapply(df, as.character)
stack(df)[1]

数据

df <- read.table(text = "A   B   C   D 
                         1   4   3   3")

【讨论】:

  • stack(df)[1]...假设A、B、...不是列名
  • @Sotos 我收到错误:Error in stack.data.frame(df) : no vector columns were selected ? ://
  • 先转换成字符。你可能有因素
【解决方案2】:

tidyverse 中,使用gather

library(tidyverse)
gather(df) %>% 
     select(value)

【讨论】:

    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    相关资源
    最近更新 更多