Установить уровни для несуществующих значений в R - PullRequest
0 голосов
/ 02 мая 2018

Прежде всего: я не уверен, что это правильный подход для моего сценария.

Существует вопросник с 4 возможными галочками ("A", "B", "C", "D"), закодированными в исходных данных от 0 до 3. Представьте, что они относятся к возрастным группам ( до 30, от 31 до 50, ...). Нет, я хочу иметь что-то вроде меток значений (как предложения SPSS), чтобы использовать их позже в сводных таблицах или графиках. В моем понимании R предлагает уровней для этого.

Проблема теперь заключается в том, что в настоящее время "A" (закодированный как 0) в настоящее время не существует в данных. Но это может измениться в будущем, потому что данные еще не зафиксированы.

Как установить уровень (SPSS означает: метка значения) для значения (0 в этом примере), которого в настоящее время нет в данных?

> set.seed(100)
> s <- sample(c(seq(1,3), NA), 10, replace=TRUE)
> f <- factor(s)
> f
 [1] 2    2    3    1    2    2    <NA> 2    3    1   
Levels: 1 2 3
> levels(f) <- c("A", # = 0
+                "B", # = 1
+                "C", # = 2
+                "D") # = 3
> f
 [1] B    B    C    A    B    B    <NA> B    C    A   
Levels: A B C D

1 Ответ

0 голосов
/ 02 мая 2018

У вас есть две трудности. Нумерация значений факторов начинается с 1, как и почти все индексации в R, и присвоение несуществующему уровню не допускается, поэтому вы можете встроить уровень «D» во время создания фактора и затем присвоить значениям NA может быть успешным:

 set.seed(100)
 s <- sample(c(seq(1,3), NA), 10, replace=TRUE)
 (f <- factor(s, levels=1:4,labels=LETTERS[1:4]))
# [1] B    B    C    A    B    B    <NA> B    C    A   
#Levels: A B C D
 f[ is.na(f) ] <- "D"
 f
 #[1] B B C A B B D B C A
#Levels: A B C D

Я считаю, что работать с символьными векторами гораздо проще, и предлагаю принять политику использования stringsAsFactors = FALSE для всех ваших read.* операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...