Справочная информация Я работаю с многочисленными большими наборами данных опросов, экспортированными из Qualtrics. В каждом наборе данных есть повторяющиеся вопросы как на испанском sh, так и на английском sh. Подмножество вопросов опроса, на которые ответил участник, определяется по их ответу на вопрос lang
в опросе. Ответы на вопросы по испанскому языку sh и английскому sh записаны в разных столбцах на фрейме данных. Имена столбцов для ответов spani sh имеют суффикс _sp
. См. Приведенный ниже пример кадра данных
df <- structure(list(id = c(1,2,3,4,5,6,7,8,9,10), lang = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("English / Inglés", "Spanish / Español"), class = c("ordered", "factor")), mob_1 = structure(c(5L, 2L, 6L, 1L, 6L, 8L, 8L, 8L, 8L, 8L), .Label = c("Strongly agree", "Agree", "Somewhat agree", "Neither agree nor disagree", "Somewhat disagree", "Disagree", "Strongly disagree", NA), class = c("ordered", "factor")), mob_2 = structure(c(2L, 3L, 2L, 3L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("A lot worse", "A little worse", "The same", "A little better", "A lot better", NA), class = c("ordered", "factor")), mob_1_sp = structure(c(8L, 8L, 8L, 8L, 8L, 5L, 2L, 6L, 1L, 6L), .Label = c("Totalmente de acuerdo", "De acuerdo", "Algo de acuerdo", "Ni de acuerdo ni en desacuerdo", "Algo en desacuerdo", "En desacuerdo", "Totalmente en desacuerdo", NA), class = c("ordered", "factor")), mob_2_sp = structure(c(6L, 6L, 6L, 6L, 6L, 2L, 3L, 2L, 3L, 5L), .Label = c("Mucho peor", "Un poco peor", "Igual", "Un poco mejor", "Mucho mejor", NA), class = c("ordered", "factor"))), row.names = c(NA, -10L), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"))
# A tibble: 10 x 6
id lang mob_1 mob_2 mob_1_sp mob_2_sp
<dbl> <ord> <ord> <ord> <ord> <ord>
1 1 English / Inglés Somewhat disagree A little worse NA NA
2 2 English / Inglés Agree The same NA NA
3 3 English / Inglés Disagree A little worse NA NA
4 4 English / Inglés Strongly agree The same NA NA
5 5 English / Inglés Disagree A lot better NA NA
6 6 Spanish / Español NA NA Algo en desacuerdo Un poco peor
7 7 Spanish / Español NA NA De acuerdo Igual
8 8 Spanish / Español NA NA En desacuerdo Un poco peor
9 9 Spanish / Español NA NA Totalmente de acuerdo Igual
10 10 Spanish / Español NA NA En desacuerdo Mucho mejor
> str(df)
Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 10 obs. of 6 variables:
$ id : num 1 2 3 4 5 6 7 8 9 10
$ lang : Ord.factor w/ 2 levels "English / Inglés"<..: 1 1 1 1 1 2 2 2 2 2
$ mob_1 : Ord.factor w/ 8 levels "Strongly agree"<..: 5 2 6 1 6 8 8 8 8 8
$ mob_2 : Ord.factor w/ 6 levels "A lot worse"<..: 2 3 2 3 5 6 6 6 6 6
$ mob_1_sp: Ord.factor w/ 8 levels "Totalmente de acuerdo"<..: 8 8 8 8 8 5 2 6 1 6
$ mob_2_sp: Ord.factor w/ 6 levels "Mucho peor"<"Un poco peor"<..: 6 6 6 6 6 2 3 2 3 5
Моя цель - создать гибкий l oop, который будет замените значения NA
в колонках языкового ответа engli sh (mob_1
, mob_2
) на значения в колонках языкового ответа spani sh (mob_1_sp
, mob_2_sp
) для испанского языка sh говорящие на языке участники, сохраняя уровни упорядоченного фактора в английском sh столбце языкового ответа.
Я написал следующее l oop, но когда я пытаюсь переназначить уровни упорядоченного коэффициента обратно на языковые столбцы engli sh, отображение не согласовано. Например:
- строка 1, значение
mob_1
не изменилось, но уровень изменился с Somewhat disagree
до Somewhat agree
- строка 6, метки
mob_1
и mob_1_sp
не совпадают, даже если они имеют одинаковые значения
for (i in colnames(df)) {
if(grepl("_sp", i)) {
eng_var <- gsub("_sp","",i) #get name of english variable equivalent
levels(df[[i]]) <- levels(df[[eng_var]]) #assign english levels to spanish variable
df[[eng_var]] = as.ordered(ifelse(df$lang=="Spanish / Español",as.numeric(df[[i]]),df[[eng_var]])) #conditionally replace values of english variable
levels(df[[eng_var]]) <- levels(df[[i]]) #re-assign english levels from spanish variable
}
}
> df
# A tibble: 10 x 6
id lang mob_1 mob_2 mob_1_sp mob_2_sp
<dbl> <ord> <ord> <ord> <ord> <ord>
1 1 English / Inglés Somewhat agree A lot worse NA NA
2 2 English / Inglés Agree A little worse NA NA
3 3 English / Inglés Neither agree nor disagree A lot worse NA NA
4 4 English / Inglés Strongly agree A little worse NA NA
5 5 English / Inglés Neither agree nor disagree The same NA NA
6 6 Spanish / Español Somewhat agree A lot worse Somewhat disagree A little worse
7 7 Spanish / Español Agree A little worse Agree The same
8 8 Spanish / Español Neither agree nor disagree A lot worse Disagree A little worse
9 9 Spanish / Español Strongly agree A little worse Strongly agree The same
10 10 Spanish / Español Neither agree nor disagree The same Disagree A lot better
Мне кажется, проблема с отображением уровней состоит в том, что в ответе на опрос имеется 8 уровней, но только 4 уникальных значения в моем воспроизводимом кадре данных.
Буду признателен за помощь в указании, где я ошибся, и если есть способ просто вставить значения столбца языка spani sh в столбцы языка engli sh, не мешая атрибутам столбца ,