R - размещение нескольких строк в одной строке в кадре данных с помощью dplyr - PullRequest
0 голосов
/ 08 сентября 2018

Итак, простая (возможно, нет) проблема с R. Допустим, у меня есть фрейм данных, который выглядит следующим образом:

x <- data.frame("id" = c("01","01","01","02","02","03","03"),
                "month" = c("jan","feb","mar","feb","mar","jan","mar"),
                "activity" = c(0.23,0.34,0.12,0.45,0.03,0.67,0.98))


id, month, activity
01, jan, 0.23
01, feb, 0.34
01, mar, 0.12
02, feb, 0.45
02, mar, 0.03
03, jan, 0.67
03, mar, 0.98

, и я хочу изменить его на что-то похожее на:

id, janAct, febAct, marAct
01, 0.23, 0.34, 0.12
02, NA, 0.45, 0.03
03, 0.67, NA, 0.98

Как я могу это сделать с помощью dplyr?

Большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 08 сентября 2018

Мы можем использовать spread после mutate в столбце «месяц» с помощью paste с «Act» в качестве суффикса.Чтобы получить порядок столбцов, как в ожидаемом выводе, мы можем преобразовать его в factor с levels, указанным в порядке появления, в противном случае он будет идти в алфавитном порядке

library(tidyverse)
x %>% 
   mutate(month = paste0(month, "Act"),
          month = factor(month, levels = unique(month))) %>% 
   spread(month, activity)
#  id janAct febAct marAct
#1 01   0.23   0.34   0.12
#2 02     NA   0.45   0.03
#3 03   0.67     NA   0.98

Или другой вариант dcast из data.table

library(data.table)
dcast(setDT(x), id ~ paste0(month, "Act"), value.var = "activity")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...