Вычислительные медианы, как представляется, a bit of an achilles heel for R (то есть no data.frame method). Каков минимальный объем ввода, необходимый для получения медианов группы из фрейма данных с использованием dplyr?Групповые медианы из фрейма данных с использованием dplyr
my_data <- structure(list(group = c("Group 1", "Group 1", "Group 1", "Group 1",
"Group 1", "Group 1", "Group 1", "Group 1", "Group 1", "Group 1",
"Group 1", "Group 1", "Group 1", "Group 1", "Group 1", "Group 2",
"Group 2", "Group 2", "Group 2", "Group 2", "Group 2", "Group 2",
"Group 2", "Group 2", "Group 2", "Group 2", "Group 2", "Group 2",
"Group 2", "Group 2"), value = c("5", "3", "6", "8", "10", "13",
"1", "4", "18", "4", "7", "9", "14", "15", "17", "7", "3", "9",
"10", "33", "15", "18", "6", "20", "30", NA, NA, NA, NA, NA)), .Names = c("group",
"value"), class = c("tbl_df", "data.frame"), row.names = c(NA,
-30L))
library(dplyr)
# groups 1 & 2
my_data_groups_1_and_2 <- my_data[my_data$group %in% c("Group 1", "Group 2"), ]
# compute medians per group
medians <- my_data_groups_1_and_2 %>%
group_by(group) %>%
summarize(the_medians = median(value, na.rm = TRUE))
Что дает:
Error in summarise_impl(.data, dots) :
STRING_ELT() can only be applied to a 'character vector', not a 'double'
In addition: Warning message:
In mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]) :
argument is not numeric or logical: returning NA
Каково наименьшее возможное временное решение здесь?
Может быть, я здесь отсутствует трюк, но это не так, потому что 'is.character (my_data_groups_1_and_2 $ value)' is 'TRUE'? Добавление в мутацию и преобразование значения в double позволяет вычислять медианы для меня. – ivyleavedtoadflax