Ваша группировка и подведение итогов были правильными. Вот несколько советов:
- освоиться с
paste
и paste0
, особенно с разницей между опцией sep
(для разделения нескольких аргументов, например, paste('a', 'b', sep = ",")
) и опцией collapse
(для разделения элементов одного аргумента, например, paste(c(1,2,3), collapse = ",")
).
- посмотрите на стандартные форматы данных; Я не знаю, какую систему вы используете, которая ожидает форматы типа
[2 4 5]
, но я бы просто использовал JSON, как с пакетом jsonlite
.
- изучить применение функций, особенно с
Map
; тогда вы могли бы написать хорошую функцию «предметного принтера» и отобразить ее на свой фрейм данных; было бы намного легче читать и поддерживать.
Вот как я это сделал (я держал вещи близко к вашему исходному коду):
library(dplyr)
data <- data.frame(
Subject = c(1,1,1,2,2,2,3,3,3),
y = c('a', 'b', 'c', 'c', 'a', 'b', 'b', 'a', 'c'),
z = c(2,5,7,5,10,12,4,9,14)
)
mh <- data %>%
group_by(Subject) %>%
summarise(
path = paste0("[", paste(y, collapse = " "), "]"),
days = paste0("[", paste(z, collapse = " "), "]")
)
for (i in 1:nrow(mh)) {
print(paste(
"Subject",
mh$Subject[i],
mh$path[i],
mh$days[i]
))
}