美文网首页
【R】如何将重复行转化为多列(一对一转化一对多)?

【R】如何将重复行转化为多列(一对一转化一对多)?

作者: 生物信息与育种 | 来源:发表于2021-04-14 16:02 被阅读0次

    需求

    一个数据框一列或多列中有重复行,如何将它的重复行转化为多列?即本来两列一对一的关系,如何转化为一对多的关系?普通的spread函数实现较为麻烦。

    示例数据如下:

    Item    Value
    Apricot 4
    Apricot 2
    Apricot 5
    Banana  4
    Carrot  7
    Carrot  5
    

    想要实现的效果:

    Item    Value 1     Value 2     Value 3
    Apricot     4           2           5
    Banana      4       
    Carrot      7           5 
    

    方法一

    使用data.table。

    library(data.table)
    dcast(setDT(df1), Item~rowid(Item, prefix="Value"), value.var="Value")
    #      Item Value1 Value2 Value3
    #1: Apricot      4      2      5
    #2:  Banana      4     NA     NA
    #3:  Carrot      7      5     NA
    

    方法二

    dplyr和tidyr需要先用mutate增加一列,再用spread。

    library(dplyr)
    library(tidyr)
    your.data %>%
      group_by(Item) %>%
      mutate(Order = seq_along(Item)) %>%
      spread(key = Order, value = Value)
    

    https://stackoverflow.com/questions/37433915/converting-multiple-duplicate-rows-into-columns-r

    相关文章

      网友评论

          本文标题:【R】如何将重复行转化为多列(一对一转化一对多)?

          本文链接:https://www.haomeiwen.com/subject/tlxllltx.html