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

需求

一个数据框一列或多列中有重复行,如何将它的重复行转化为多列?即本来两列一对一的关系,如何转化为一对多的关系?普通的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

原文地址:https://www.cnblogs.com/jessepeng/p/14658376.html