r - Group medians from a data frame using dplyr -
computing medians seems a bit of achilles heel r (ie. no data.frame method). least amount of typing needed group medians data frame using 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))
which gives:
error in summarise_impl(.data, dots) : string_elt() can applied 'character vector', not 'double' in addition: warning message: in mean.default(sort(x, partial = half + 0l:1l)[half + 0l:1l]) : argument not numeric or logical: returning na
what least effort workaround here?
as commented ivyleavedtoadflax, error caused supplying non-numeric or non-logical argument median
, since value
column of type character
(you can tell not numeric
seeing numbers quoted). here 2 simple ways solve it:
my_data %>% filter(group %in% c("group 1", "group 2")) %>% group_by(group) %>% summarize(the_medians = median(as.numeric(value), na.rm = true))
or
my_data %>% filter(group %in% c("group 1", "group 2")) %>% mutate(value = as.numeric(value)) %>% group_by(group) %>% summarize(the_medians = median(value, na.rm = true))
to check structure including type
of columns in data, conveniently use
str(my_data) #classes ‘tbl_df’ , 'data.frame': 30 obs. of 2 variables: # $ group: chr "group 1" "group 1" "group 1" "group 1" ... # $ value: chr "5" "3" "6" "8" ...
Comments
Post a Comment