Проблема с фактором и переупорядочиванием 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 для всех данных за десятилетие. Что случилось?


person Manuela Ripollés Orovitg    schedule 16.07.2019    source источник
comment
может быть factor(..., levels=..., ordered=TRUE)   -  person Cath    schedule 16.07.2019
comment
это не сработало...   -  person Manuela Ripollés Orovitg    schedule 16.07.2019
comment
трудно понять это без воспроизводимого примера. но я вижу одну вещь: во втором фрагменте кода вы используете уровни, которых нет в данных. Вы пробовали использовать levels = c("70s", "80s", "90s","00s") во втором фрагменте кода?   -  person jludewig    schedule 16.07.2019
comment
@ManuelaRipollésOrovitg: Вы получили NA, потому что указанных вами уровней не существовало. Должно было быть labels = c("Seventies", "Eighties", "Nineties", "Twothous") вместе с levels, о котором упоминал jludewig.   -  person Tung    schedule 16.07.2019
comment
спасибо проблема была в том, что да!   -  person Manuela Ripollés Orovitg    schedule 16.07.2019


Ответы (1)


Я только что сделал простой набор данных лет

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)

а теперь попробуй огранить.

Я думаю, проблема с вашим кодом была в том, что вы дали уровням один набор имен, когда сначала преобразовали переменные в фактор, а затем во второй строке кода вы дали им другой набор имен. Придерживайтесь одного и того же набора, и он должен работать

person JRBatHolmes    schedule 16.07.2019