代码之家  ›  专栏  ›  技术社区  ›  Morpheus

将列值聚合成行[重复]

  •  0
  • Morpheus  · 技术社区  · 6 年前

    我想在总结数据框架方面得到一些帮助。

    我的示例df如下:

    ID           Zoo            Last_date
    ABC-DEF     DENVER          Oct_2017
    ABC-DEF     DENVER          Oct_2017
    ABC-DEF     DENVER          Nov_2017  
    ABC-DEF     DENVER          Nov_2017  
    ABC-DEF     DENVER          Nov_2017  
    HG-IJK      MEMPHIS         Jan_2018
    JK-LMO      MEMPHIS         Feb_2018
    

    结果应该是

    ID          ZOO          Oct_2017  Nov_2017 Jan_2019  Feb_2018
    ABC-DEF    DENVER          2         3         0           0
    HG-IJK      MEMPHIS        0         0         1           0
    JK-LMO      MEMPHIS        0         0         0           1
    

    我试着看着 reshape2 使用 melt cast 但我没能达到预期的效果。 我把数据合成了长格式

    tempMelt <- melt(temp, id.vars = 1:2, na.rm = FALSE)
    

    使用

    casttemp <- dcast(aqm, "ID" + "Zoo" ~ value)
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   IceCreamToucan    6 年前
    library(reshape2) # or you could use data.table's dcast function
    dcast(df, ID + Zoo ~ Last_date)
    
    #        ID     Zoo Feb_2018 Jan_2018 Nov_2017 Oct_2017
    # 1 ABC-DEF  DENVER        0        0        3        2
    # 2  HG-IJK MEMPHIS        0        1        0        0
    # 3  JK-LMO MEMPHIS        1        0        0        0
    

    这给出了关于不指定值var或聚合函数的警告。为了避免警告,你可以更冗长些。

    dcast(df, ID + Zoo ~ Last_date, value.var = 'Last_date', length)
    

    数据使用

    df <- data.table::fread("
    ID           Zoo            Last_date
    ABC-DEF     DENVER          Oct_2017
    ABC-DEF     DENVER          Oct_2017
    ABC-DEF     DENVER          Nov_2017  
    ABC-DEF     DENVER          Nov_2017  
    ABC-DEF     DENVER          Nov_2017  
    HG-IJK      MEMPHIS         Jan_2018
    JK-LMO      MEMPHIS         Feb_2018
    ")