Я использую:
library(tidyverse)
tips <- data.frame(
gender = c("female", "male", "male")
,smoker = c("yes", "no", "no")
, tip = c(10, 5, 0)
)
tips %>%
gather(key_value, value) %>% # wide to long
count(key_value, value) %>%
group_by(key_value) %>%
mutate(percentage = round(n / sum(n), 2)) %>%
unite(key_value_pair, key_value, value, sep = "=")
Это приводит к:
key_value_pair n percentage
1 gender=female 1 0.33
2 gender=male 2 0.67
3 smoker=no 2 0.67
4 smoker=yes 1 0.33
5 tip=0 1 0.33
6 tip=10 1 0.33
7 tip=5 1 0.33
Существует ли простой способ получения суммы кончика столбца для приведенного выше примера, где сумма является суммойконкретной комбинации (например, пол = женщина, есть одна строка, таким образом, сумма равна 10, пол = мужчина, есть 2 строки, таким образом, сумма равна 5).Ожидаемый результат будет:
key_value_pair n percentage sum
1 gender=female 1 0.33 10
2 gender=male 2 0.67 5
3 smoker=no 2 0.67 5
4 smoker=yes 1 0.33 10
5 tip=0 1 0.33 0
6 tip=10 1 0.33 10
7 tip=5 1 0.33 5