У меня есть следующий набор данных:
structure(list(time = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L),
x = c(40.8914337158203, 20.0796813964844, 13.9093618392944,
17.1513957977295, 18.5109558105469, 40.7868537902832, 19.9750995635986,
13.804780960083, 16.8376483917236, 18.4063758850098, 40.6822700500488,
19.7659358978271, 13.7001991271973, 16.6284866333008, 18.3017921447754,
40.5776901245117, 19.66135597229, 13.5956182479858, 16.3147411346436,
18.1972122192383, 40.5776901245117, 19.5567722320557, 13.4910354614258,
16.1055774688721, 17.9880485534668), y = c(0.603550314903259,
-8.24852085113525, 9.65680503845215, -19.0118350982666, 6.43787002563477,
0.704141974449158, -8.34911251068115, 9.75739574432373, -19.2130165100098,
6.43787002563477, 0.704141974449158, -8.44970417022705, 9.75739574432373,
-19.5147914886475, 6.43787002563477, 0.704141974449158, -8.65088748931885,
9.85798835754395, -19.8165683746338, 6.33727836608887, 0.704141974449158,
-8.85207080841064, 9.85798835754395, -20.1183433532715, 6.33727836608887
), object = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L,
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -25L), .Names = c("time",
"x", "y", "object"))
Теперь я хотел бы вычислить выпуклую оболочку (используя функцию chull
) для каждого значения time
и сохранить ее в том же наборе данных (как тогда я хотел бы построить график с ggplot2
).
Я могу использовать chull
для каждого значения времени, используя
chull(filter(data_sample, time == 1)$x, filter(data_sample, time == 1)$y)
, который возвращает вектор 4 3 1
. Поэтому я подумал, что сначала могу сгруппировать по времени и вычислить точки выпуклой оболочки внутри групп с чем-то вроде
data_sample %>% group_by(time) %>% summarise(pts = chull(data_sample$x, data_sample$y))
Проблема в том, что я не могу сохранить вектор в строке. Хранение каждой из вершин в отдельном столбце было бы вариантом, но следующее
data_sample %>% group_by(time) %>% summarise(pt1 = chull(data_sample$x, data_sample$y)[1])
не дает разумных результатов. Итак, мои вопросы:
1. Как я могу сохранить вектор для каждой строки в одном столбце? Я читал, что на самом деле столбцы могут иметь столбец списка, но как я могу создать это в моем случае?
2. Что не так с моей попыткой вычислить chull
в каждой группе?
- (дополнительный вопрос, если можно) Почему на самом деле
data_sample %>% filter(time == 1) %>% chull(.$x, .$y)
не работает? Это потому, что chull
не предназначен для работы с трубами, а dplyr
?