Я бы хотел найти решение для следующей задачи.В моем наборе данных у меня есть данные о различных уровнях факторов.Я хотел бы создать новый уровень фактора «Итого», который будет суммой всех значений Y на существующих уровнях фактора X. Это можно сделать, например, с помощью:
mutate(Data, X = fct_collapse(X, Total = c("A", "B", "C", "D"))) %>%
group_by(X) %>%
summarize(Y = sum(Y))
Однако это такжеобязательно перезаписывает исходные уровни факторов.Мне потребуется объединить исходный набор данных с новым свернутым набором данных на дополнительном шаге.
Одно из решений, которое я использовал в прошлом для сохранения исходных уровней, - это перенести данные в широкий формат и перейти к * 1006.* и mutate()
для создания новой переменной с «Total», а затем для изменения ее формы на long.
spread(Data, key = X, value = Y) %>%
rowwise() %>%
mutate(Total = sum(A, B, C, D)) %>%
gather(1:5, key = "X", value = "Y")
Однако я очень недоволен этим решением, поскольку использование rowwise()
не считается хорошей практикой,Было бы здорово, если бы вы указали мне на доступное альтернативное решение, как объединять данные с различными уровнями факторов, сохраняя при этом исходные уровни.
Минимальный воспроизводимый пример:
Data<-data.frame(
X = factor(c("A", "B", "C", "D")),
Y = c(1000, 2000, 3000, 4000))
Ожидаемый результат:
# A tibble: 5 x 2
X Y
<chr> <dbl>
1 A 1000
2 B 2000
3 C 3000
4 D 4000
5 Total 10000