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