因子和重新排序的问题 facet_grid
Problem with factor and reordering facet_grid
我已经从 gss 数据(https://gss.norc.org/)关联几十年的数据构建了一个数据集
env_data <- select(gss, year, sex, degree, natenvir) %>% na.omit()
env_datadecades <- env_data %>%
mutate(decade=as.factor(ifelse(year<1980,
"70s",
ifelse(year>1980 & year<=1990,
"80s",
ifelse(year>1990 & year<2000, "90s", "00s")))))
我想用 ggplot2
和 facet_grid()
绘制它,但顺序不对,所以我按照在其他地方看到的那样制作它
set.seed(6809)
env_datadecades$decade <- factor(env_datadecades$decade,
levels = c("Seventies", "Eighties", "Nineties", "Twothous"))
它第一次成功了,但是当我再次尝试 运行 代码时,我得到了十年内所有数据的 NA
。发生了什么事?
我刚刚做了一个简单的年份数据集
df <- data.frame(Years = sample(1970:2010, 20, replace = T))
用这个方法转换成需要的因子,
df <- df %>%
mutate(Decades = case_when(Years < 1980 ~ "Seventies",
1980 <= Years & Years < 1990 ~ "Eighties",
1990 <= Years & Years < 2000 ~ "Nineties",
2000 <= Years ~ "TwoThousands"))
df$Decades <- factor(df$Decades, levels = c("Seventies", "Eighties", "Nineties", "TwoThousands"), ordered = T)
现在尝试刻面。
我认为你的代码的问题在于,当你第一次将变量转换为一个因子时,你给了水平一组名称,然后在第二行代码中,你给了它们另一组名称。坚持同一套,应该可以的
我已经从 gss 数据(https://gss.norc.org/)关联几十年的数据构建了一个数据集
env_data <- select(gss, year, sex, degree, natenvir) %>% na.omit()
env_datadecades <- env_data %>%
mutate(decade=as.factor(ifelse(year<1980,
"70s",
ifelse(year>1980 & year<=1990,
"80s",
ifelse(year>1990 & year<2000, "90s", "00s")))))
我想用 ggplot2
和 facet_grid()
绘制它,但顺序不对,所以我按照在其他地方看到的那样制作它
set.seed(6809)
env_datadecades$decade <- factor(env_datadecades$decade,
levels = c("Seventies", "Eighties", "Nineties", "Twothous"))
它第一次成功了,但是当我再次尝试 运行 代码时,我得到了十年内所有数据的 NA
。发生了什么事?
我刚刚做了一个简单的年份数据集
df <- data.frame(Years = sample(1970:2010, 20, replace = T))
用这个方法转换成需要的因子,
df <- df %>%
mutate(Decades = case_when(Years < 1980 ~ "Seventies",
1980 <= Years & Years < 1990 ~ "Eighties",
1990 <= Years & Years < 2000 ~ "Nineties",
2000 <= Years ~ "TwoThousands"))
df$Decades <- factor(df$Decades, levels = c("Seventies", "Eighties", "Nineties", "TwoThousands"), ordered = T)
现在尝试刻面。
我认为你的代码的问题在于,当你第一次将变量转换为一个因子时,你给了水平一组名称,然后在第二行代码中,你给了它们另一组名称。坚持同一套,应该可以的