Использование имен строк обычно не является хорошей идеей, так как это удаляет информацию из ячеек вашего фрейма данных. Лучше сохранить исходные имена переменных в столбце обрабатываемого набора данных.
В dplyr
v1.0.0.0 код для этого является компактным.
d <- mtcars %>%
summarise(across(everything(), mean)) %>%
pivot_longer(names_to="variable", values_to="mean", cols=everything())
d
# A tibble: 11 x 2
variable mean
* <chr> <dbl>
1 mpg 20.1
2 cyl 6.19
3 disp 231.
4 hp 147.
5 drat 3.60
6 wt 3.22
7 qsec 17.8
8 vs 0.438
9 am 0.406
10 gear 3.69
11 carb 2.81
Если вы должны использовать имена строк, а не столбец в таблице:
row.names(d) <- d$variable
d <- d %>% select(-variable)
Я только что видел ваши gear.x
строк. Что вы пытаетесь там сделать?
Обновить
Полное решение:
mtcars %>%
summarise(across(everything(), mean)) %>%
pivot_longer(names_to="variable", values_to="mean", cols=everything()) %>%
mutate(mean=as.character(mean)) %>%
bind_rows(
mtcars %>%
group_by(gear) %>%
summarise(mean=sprintf("%8.6f%%", n()/nrow(.))) %>%
mutate(variable=paste0("gear.", gear)) %>%
select(-gear)
)
# A tibble: 14 x 2
variable mean
<chr> <chr>
1 mpg 20.090625
2 cyl 6.1875
3 disp 230.721875
4 hp 146.6875
5 drat 3.5965625
6 wt 3.21725
7 qsec 17.84875
8 vs 0.4375
9 am 0.40625
10 gear 3.6875
11 carb 2.8125
12 gear.3 0.468750%
13 gear.4 0.375000%
14 gear.5 0.156250%
Лично я бы не форматировал проценты по шестеренке в виде символов внутри фрейма данных / таблицы. Я бы сохранил их как двойные (и добавил бы столбец индикатора, чтобы определить тип данных, представленных в mean
, и переименовать mean
в нечто более представительное, например statistic
- в этом случае столбец индикатора может принимать значения mean
и percentage
например) и представлены в процентах только на выходе. (И я думаю, вам нужно умножить на 100, чтобы получить проценты. В настоящее время у вас есть дроби, обозначенные как проценты.)