Транспонировать / изменять форму строк в столбцах с заданными условиями - PullRequest
3 голосов
/ 24 ноября 2011

У меня есть следующие данные:

request   user   group
1         1      1
4         1      1
7         1      1
5         1      2
8         1      2
1         2      3
4         2      3
7         2      3
9         2      4

Я хотел бы извлечь последовательности запросов и перенести их в столбцы.

Результат должен выглядеть следующим образом:

user   group   request1   request2   request3
1      1       1          4          7
1      2       5          8          NA
2      3       1          4          7
2      4       9          NA         NA

Я пытался сделать это с помощью ddply (plyr), но не пришел к рабочему решению.

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011
library(reshape)

# Make some fake data
dat <- data.frame(user = c(1,1,1,2,2,3), group = c(1,1,1,1,1,2), request = c(1,4,7,5,8,1))
# Add in an ordered id
newdat <- ddply(dat, .(user, group), transform, idx = paste("request", 1:length(request), sep = ""))
# Use cast to get what we want
cast(newdat, user + group ~ idx, value = .(request))

Вероятно, есть более хороший способ получить то, что я называю idx, и это, по сути, то, что становится заголовком столбца.Возможно, это можно сделать без создания набора данных newdat, но это то, о чем я думал.

2 голосов
/ 24 ноября 2011

aggregate сближает вас:

dat <- data.frame(
    user = c(1,1,1,2,2,3,3,3,4), 
    group = c(1,1,1,1,1,2,2,2,2), 
    request = c(1,4,7,5,8,1,4,7,9)
)

aggregate(request~group + user, dat, FUN=c)

  group user request
1     1    1 1, 4, 7
2     1    2    5, 8
3     2    3 1, 4, 7
4     2    4       9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...