将列值聚合到行中

时间:2018-06-19 19:18:09

标签: r reshape

我试图在汇总数据框方面获得一些帮助。

我的示例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

我尝试使用reshape2melt函数查看cast,但无法达到预期的效果。 我将数据融化为长格式

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

并使用

进行投射
casttemp <- dcast(aqm, "ID" + "Zoo" ~ value)

1 个答案:

答案 0 :(得分:2)

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
")