这是问题的变体:Group factor levels in ggplot。
我有一个数据框:
df <- data.frame(respondent = factor(c(1, 2, 3, 4, 5, 6, 7)),
location = factor(c("California", "Oregon", "Mexico",
"Texas", "Canada", "Mexico", "Canada")))
与美国有三个不同的级别。我不想破坏它们,因为状态之间的区别对数据分析很有用。然而,我希望有一个基本的条形图,它结合了美国的三个州并将它们叠加在一起,这样在条形图中有三个条形图 - 加拿大,墨西哥和美国 - 美国酒吧分开分为三个州:
如果州名因子级别的名称中包含“US”,例如“US:California”,我可以使用
library(tidyverse)
with_states <- df %>%
separate(location, into = c("Country", "State"), sep = ": ") %>%
replace_na(list(State = "Other")) %>%
mutate(State = as.factor(State)
%>% fct_relevel("Other", after = Inf))
达到预期的效果。但是当R不知道这三个州在美国时,怎么办呢?
答案 0 :(得分:1)
如果您查看上一个示例,则separate
和replace_na
函数的所有内容都将location
变量分隔为country
和state
变量:
df
respondent location
1 1 US: California
2 2 US: Oregon
3 3 Mexico
...
df %>%
separate(location, into = c("Country", "State"), sep = ": ") %>%
replace_na(list(State = "Other"))
respondent Country State
1 1 US California
2 2 US Oregon
3 3 Mexico Other
...
如果您的数据采用以下格式,那么您真的需要做的就是:使用国家/地区列和州/普罗旺斯列。
有很多方法可以自己做到这一点。很多时候,您的数据已经采用这种格式。如果不是,最简单的解决方法是连接到一个将位置映射到国家/地区的表:
df
respondent location
1 1 California
2 2 Oregon
3 3 Mexico
4 4 Texas
5 5 Canada
6 6 Mexico
7 7 Canada
state_mapping <- data.frame(state = c("California", "Oregon", "Texas"),
country = c('US', 'US', 'US'),
stringsAsFactors = F)
df %>%
left_join(state_mapping, by = c('location' = 'state')) %>%
mutate(country = if_else(is.na(.$country),
location,
country))
respondent location country
1 1 California US
2 2 Oregon US
3 3 Mexico Mexico
4 4 Texas US
5 5 Canada Canada
6 6 Mexico Mexico
7 7 Canada Canada
一旦你以这种格式获得它,你可以做其他问题所建议的。