【问题标题】:Merge several dataframe columns in R [duplicate]合并R中的几个数据框列[重复]
【发布时间】:2019-02-06 06:10:40
【问题描述】:

我有这个数据框,其中第一列给出了时间步长,每一行给出了值:

1  1.5  1.6  5.4  7.8
2  4.5  4.6  2.4  4.7
3  7.8  7.8  6.8  6.8 

我需要这样安排

1  1.5 
2  4.5  
3  7.8 
1  1.6
2  4.6
3  7.8
1  5.4
2  2.4
3  6.8
1  7.8
2  4.7
3  6.8

我尝试了简单的gather()tidyr,但它不起作用,因为我还需要重新编号。

任何想法...我想它太简单了

【问题讨论】:

  • 请重现数据(使用 dput)。
  • 解释为什么gather() 或melt() 不起作用
  • @RonakShah 好吧,无论如何它都是骗子!我相信它的“重塑宽长”骗局。他要求 2 cols 达到期望的结果。

标签: r tidyr collapse


【解决方案1】:

你可以

data.frame(new1 = df[,1], new2 = unlist(df[,-1]))

#    new1 new2
#V21    1  1.5
#V22    2  4.5
#V23    3  7.8
#V31    1  1.6
#V32    2  4.6
#V33    3  7.8
#V41    1  5.4
#V42    2  2.4
#V43    3  6.8
#V51    1  7.8
#V52    2  4.7
#V53    3  6.8

对于new1,您使用的是r e c y c l i n g

【讨论】:

    【解决方案2】:

    dplyr:

    library(dplyr)
    
    tt <- "id v1 v2 v3 v4
    1  1.5  1.6  5.4 7.8
    2  4.5  4.6  2.4  4.7
    3  7.8  7.8  6.8  6.8" 
    
    dat <- read.table(text = tt, header = T)
    
    dat %>% 
      gather("id", "value") %>% 
      mutate(id = rep(1:3, 4))
    
    #    id value
    # 1   1   1.5
    # 2   2   4.5
    # 3   3   7.8
    # 4   1   1.6
    # 5   2   4.6
    # 6   3   7.8
    # 7   1   5.4
    # 8   2   2.4
    # 9   3   6.8
    # 10  1   7.8
    # 11  2   4.7
    # 12  3   6.8
    

    【讨论】:

    • rep(1:3, 4) 未泛化
    • 我很惊讶 mutate 不回收?我愿意接受建议
    • 嗯,最简单的应该是ncol(df) - 1...
    • @RLave,这是设计使然。 tidyverse 中的函数(例如data_frame())通常不会回收,因为它会产生很难找到的错误。顺便说一句,可以使用readr::parse_number()
    猜你喜欢
    • 2021-06-19
    • 2020-10-19
    • 2021-02-23
    • 2022-06-17
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多