Я объявляю переменные, которые я пытаюсь переоценить с помощью пакета «PLYR», в списке переменных.

На данный момент я столкнулся с проблемой. Я перебираю несколько числовых переменных, чтобы переоценить их в обратном порядке, чтобы более высокое значение ассоциировалось с более высокой степенью удовлетворения.

Мне трудно понять, что означает ошибка. И я нашел еще один вопрос, похожий на Обновлено: Plyr rename () не распознает идентичные ' Икс'; Ошибка. Следующие значения from не присутствовали в x: Я много чего пробовал, я пытался удалить двойные кавычки, изменил цикл на {{X0}} и т. Д.

varlist = c("q16","q17","q18","q19","q20","q21","q22","q23","q24")

Затем я перебираю переменные в списке переменных.

for (i in varlist) {
    data_rename[,i] <- as.numeric(revalue(as.character(data_rename[,i]), c("6"="1","5"="2","4"="3","3"="4","2"="5","1"="6")))
}

Я получаю следующую ошибку:

The following from values were not present in x: 6, 5, 4, 3, 2, 1  

Надеюсь, кто-нибудь сможет мне помочь

Подмножество данных доступно здесь: https://www.dropbox.com/s/rsx4coeg4phgcri/data_rename. txt? dl = 0

Вы можете увидеть список глобальных объектов доступно для Sightly в приложении AEM.

r
1
Andreas Steinberg 13 Май 2016 в 13:27

2 ответа

Лучший ответ

Это не ошибка. Это предупреждение, и его можно подавить с помощью {{ X0}} аргумент revalue():

library(plyr);

varlist = c('q16','q17','q18','q19','q20','q21','q22','q23','q24');
data_rename <- do.call(data.frame,setNames(nm=varlist,rep(list(as.character(1:5)),9L)));
data_rename;
##   q16 q17 q18 q19 q20 q21 q22 q23 q24
## 1   1   1   1   1   1   1   1   1   1
## 2   2   2   2   2   2   2   2   2   2
## 3   3   3   3   3   3   3   3   3   3
## 4   4   4   4   4   4   4   4   4   4
## 5   5   5   5   5   5   5   5   5   5

## run with warnings
for (i in varlist) data_rename[,i] <- as.numeric(revalue(as.character(data_rename[,i]),c('6'='1','5'='2','4'='3','3'='4','2'='5','1'='6')));
## The following `from` values were not present in `x`: 6
## The following `from` values were not present in `x`: 6
## The following `from` values were not present in `x`: 6
## The following `from` values were not present in `x`: 6
## The following `from` values were not present in `x`: 6
## The following `from` values were not present in `x`: 6
## The following `from` values were not present in `x`: 6
## The following `from` values were not present in `x`: 6
## The following `from` values were not present in `x`: 6
data_rename;
##   q16 q17 q18 q19 q20 q21 q22 q23 q24
## 1   6   6   6   6   6   6   6   6   6
## 2   5   5   5   5   5   5   5   5   5
## 3   4   4   4   4   4   4   4   4   4
## 4   3   3   3   3   3   3   3   3   3
## 5   2   2   2   2   2   2   2   2   2

## run without warnings
data_rename <- do.call(data.frame,setNames(nm=varlist,rep(list(as.character(1:5)),9L)));
for (i in varlist) data_rename[,i] <- as.numeric(revalue(warn_missing=F,as.character(data_rename[,i]),c('6'='1','5'='2','4'='3','3'='4','2'='5','1'='6')));
data_rename;
##   q16 q17 q18 q19 q20 q21 q22 q23 q24
## 1   6   6   6   6   6   6   6   6   6
## 2   5   5   5   5   5   5   5   5   5
## 3   4   4   4   4   4   4   4   4   4
## 4   3   3   3   3   3   3   3   3   3
## 5   2   2   2   2   2   2   2   2   2

Так что мне это не кажется проблемой.

data_rename <- read.table('data_rename.txt',sep=';');
head(data_rename);
##   q16 q17 q18 q19 q20 q21 q22 q23 q24
## 1   2   2   3   1   2   2   3   3   2
## 2   1   1   1   1   1   2   1   1   2
## 3   1   2   2   2   2   1   1   1   1
## 4   2   4   2   3   3   3   2   3   1
## 5   2   4   4   3   3   3   3   3   1
## 6   3   3   3   2   2   2   2   2   1
for (i in varlist) data_rename[,i] <- as.numeric(revalue(as.character(data_rename[,i]),c('6'='1','5'='2','4'='3','3'='4','2'='5','1'='6')));
## The following `from` values were not present in `x`: 6, 5, 4, 3
head(data_rename);
##   q16 q17 q18 q19 q20 q21 q22 q23 q24
## 1   5   5   4   6   5   5   4   4   5
## 2   6   6   6   6   6   5   6   6   5
## 3   6   5   5   5   5   6   6   6   6
## 4   5   3   5   4   4   4   5   4   6
## 5   5   3   3   4   4   4   4   4   6
## 6   4   4   4   5   5   5   5   5   6

Виновником является столбец q24, который имеет только значения 1 и 2, IOW отсутствует 3, 4, 5 и 6 (примечание: я выполнил следующее для необработанных данных файла, т.е. перед запуском цикла for, который переоценивает значения):

sapply(data_rename,function(col) table(col)[as.character(1:6)]);
##    q16  q17  q18  q19  q20  q21  q22  q23  q24
## 1 1458  731  922 1591 1327  825 1117 1128 1941
## 2 1582 1664 1694 1616 1875 1814 1679 1707 1879
## 3  390  761  586  418  316  510  570  597   NA
## 4  283  500  455  137  246  477  351  278   NA
## 5  103  152  149   41   53  190   92   77   NA
## 6    4   11   14   17    3    4   11   33   NA

В настоящее время я работаю над проектом и использую R для обработки и анализа данных. Мои данные взяты из опроса примерно 3500 человек с примерно 200 переменными.

1
bgoldst 13 Май 2016 в 10:51

Рассмотрите возможность использования dplyr вместо plyr:

library(dplyr)
data_rename %>%
    mutate_each(funs(7 - .), q16:q24)

Я запустил цикл for для ваших данных Dropbox и получил только одно предупреждающее сообщение, которое относилось к значениям 6, 5, 4 и 3. Но цикл работал, несмотря на предупреждение:

0
MarkusN 13 Май 2016 в 13:48