【发布时间】:2019-11-28 17:17:06
【问题描述】:
我正在尝试用有序类别替换数据框列中的所有数值。这是一个虚拟数据框:
df <- data.frame(a = c(1:100), b = sample(c(0,20), size = 100, replace = TRUE), c = c(1:100))
请注意,实际的数据框是使用haven::read_dta() 导入的数据文件。实际数据框可以在 GSS here 上找到。我正在处理 2018 年的文件,并希望将 b 中的所有值(即 0 到 20)替换为一组类别,如下所示:
educ_vec <- c("No formal schooling", "1st grade", "2nd grade", "3rd grade", "4th grade", "5th grade", "6th grade", "7th grade", "8th grade", "9th grade", "10th grade", "11th grade", "12th grade", "1 year of college", "2 years of college", "3 years of college", "4 years of college", "5 years of college", "6 years of college", "7 years of college", "8 years of college")
educ_fac <- factor(educ_vec, ordered = TRUE, levels = educ_vec)
如果我对每个单独的类别都使用mutate和ifelse,则过程太长,并且不会保留educ_fac中的顺序。我尝试了几种方法来一步完成,但没有成功。
一种方法是:
gss_df %>%
mutate(educ = fct_recode(educ,
"No formal schooling" = 0,
"1st grade" = 1,
"2nd grade" = 2,
"3rd grade" = 3,
"4th grade" = 4,
"5th grade" = 5,
"6th grade" = 6,
"7th grade" = 7,
"8th grade" = 8,
"9th grade" = 9,
"10th grade" = 10,
"11th grade" = 11,
"12th grade" = 12,
"1 year of college" = 13,
"2 years of college" = 14,
"3 years of college" = 15,
"4 years of college" = 16,
"5 years of college" = 17,
"6 years of college" = 18,
"7 years of college" = 19,
"8 years of college" = 20))
Error: `f` must be a factor (or character vector or numeric vector).
其他两种方法类似,但也没有成功:
gss_df %>%
mutate(educ = fct_recode(educ, educ_fac))
Error: `f` must be a factor (or character vector or numeric vector).
gss_df %>%
mutate(educ = recode_factor(educ, educ_vec, ordered = TRUE))
Error in UseMethod("recode") : no applicable method for 'recode' applied to an object of class "haven_labelled"
谁能解决这个问题?
【问题讨论】:
标签: r