按组折叠文本并转换为列表

时间:2018-01-18 21:47:15

标签: r dplyr

我通常喜欢使用整洁的数据,但我使用的是一个包,要求我将数据转换为特定表单的列表。我的数据如下

  quantity itemnumber     id
     <int> <chr>       <int>
1        1 u           99732
2        2 a          100229
3        1 c          100229
4        1 x          100229
5        1 s          100229
6        5 r           99732
7        1 e           99732
8        1 i          100229
9        3 y           99732

我需要这样做str(mydata)如下所示:

List of 2
 $ id 99732    : chr [1:10] "u" "r" "r" "r" "r" "r" "e" "y" "y" "y"
 $ id 100229    : chr [1:6] "a" "a" "c" "x" "s" "i"

我目前的解决方案是

mydata %>%
  group_by(id) %>%
  summarise(itemnumber=paste(itemnumber,collapse=''))

但是这并没有让我一路走来。我仍然有一个数据框,并且没有考虑itemnumbers的复制。

1 个答案:

答案 0 :(得分:2)

您可以split使用id作为群组,rep按照quantity要求使用每个字词。

with(dat, split(rep(itemnumber, quantity), rep(id, quantity)))
dat = read.table(header=TRUE, text="  quantity itemnumber     id
1        1 u           99732
2        2 a          100229
3        1 c          100229
4        1 x          100229
5        1 s          100229
6        5 r           99732
7        1 e           99732
8        1 i          100229
9        3 y           99732", stringsAsFactors=FALSE)