У меня есть следующий фрейм данных. Как я могу сформировать новый фрейм / матрицу данных, где каждая строка содержит ожидаемые значения каждой категориальной переменной в столбце идентификатора, и эти значения взяты в порядке возрастания времени?
df <- read.csv("data.csv", header = TRUE) > df ID Time Expectation 1 cat 1.1 1 2 dog 1.0 2 3 dog 1.1 3 4 guinea_pig 1.0 7 5 cat 1.0 1 6 guinea_pig 3.8 10 7 cat 0.8 1 8 cat 2.1 1 9 cat 3.6 1 10 guinea_pig 3.0 16 11 dog 0.9 2 12 guinea_pig 2.7 15 13 guinea_pig 4.0 10 14 dog 5.2 6 15 dog 7.2 7
Например, строка для собаки будет читать: (2, 2, 3, 6, 7). Один для guinea_pig будет (7, 15, 16, 10, 10) и т. Д. c. Можно ли включить категориальные данные в качестве имен строк нового фрейма данных или матрицы?
Большое спасибо!
Вот простой способ:
library(data.table) df[order(Time),list(list(Expectation)),.(ID)] ID V1 1: cat 1,1,1,1,1 2: dog 2,2,3,6,7 3: guinea_pig 7,15,16,10,10
Time
ID
list
Expectation
Издание dplyr:
dplyr
df %>% group_by(ID) %>% summarise(var = list(Expectation[order(Time)])) # # A tibble: 3 x 2 # ID var # <chr> <list> # 1 cat <int [5]> # 2 dog <int [5]> # 3 guinea_pig <int [5]>
Чтобы увидеть внутренние значения, добавьте %>% print.data.frame:
%>% print.data.frame
# ID var # 1 cat 1, 1, 1, 1, 1 # 2 dog 2, 2, 3, 6, 7 # 3 guinea_pig 7, 15, 16, 10, 10
Вот базовое решение R, использующее aggregate + order, т. Е.
aggregate
order
aggregate(Expectation~ID,df[order(df$ID,df$Time),],FUN = list)
, такое что
ID Expectation 1 cat 1, 1, 1, 1, 1 2 dog 2, 2, 3, 6, 7 3 guinea_pig 7, 15, 16, 10, 10
Еще один простой способ использования dplyr:
library(dplyr) library(tidyr) df<-fread(" Index ID Time Expectation 1 cat 1.1 1 2 dog 1.0 2 3 dog 1.1 3 4 guinea_pig 1.0 7 5 cat 1.0 1 6 guinea_pig 3.8 10 7 cat 0.8 1 8 cat 2.1 1 9 cat 3.6 1 10 guinea_pig 3.0 16 11 dog 0.9 2 12 guinea_pig 2.7 15 13 guinea_pig 4.0 10 14 dog 5.2 6 15 dog 7.2 7") df %>% group_by(ID) %>% dplyr::summarise(Expectation_All =paste(Expectation, collapse = ",")) # ID Expectation_All # <chr> <chr> # 1 cat 1,1,1,1,1 # 2 dog 2,3,2,6,7 # 3 guinea_pig 7,10,16,15,10