2013-02-25 4 views
0

Попытки перекодировать мои пропущенные значения NA в R с epicalc пакетом, я получаю следующее сообщение об ошибке:ошибка перекодирования

recode(trstlglR, 99 , NA, dataFrame=ESSround5) 
Error in search()[[pos]] : attempt to select more than one element 

Хотя команда, кажется, делать то, что я хочу, я боюсь, что мне не хватает что нибудь. Размер данных слишком велик, чтобы проверять каждое значение. У кого-нибудь есть опыт?

воспроизводимый пример:

structure(list(trstlglR = c(0L, 0L, 0L, 1L, NA, NA, NA, NA, 0L, 
0L), trstplcR = c(0L, 0L, 0L, 0L, 0L, NA, NA, 0L, 0L, 0L), plcarcrR = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, NA, NA)), .Names = c("trstlglR", 
"trstplcR", "plcarcrR"), row.names = c(1L, 2L, 3L, 5714L, 2450L, 
2980L, 3837L, 6136L, 2197L, 2198L), class = "data.frame") 
+0

кажется, что вы должны сделать первый 'использование (ESSround5) 'перед выполнением' recode'. – Arun

+0

@Arun Действительно ошибка исчезла. – Marloes

+0

@GaryWeissman, вам не нужно «применять». вы можете просто сделать: 'df $ x [df $ x == 99] <- NA' – Arun

ответ

2

Если посмотреть на ?recode, примеры первого сделать:

use(.data) 

перед запуском recode. Теперь, если вы читали, что ?use, то вы найдете это:

'use' reads in datasets from Dbase (.dbf), Stata (.dta), SPSS(.sav), EpiInfo(.rec) and Comma separated value (.csv) formats as well as R data frames. The destination data frame is saved in memory, by default as '.data', and automatically attached to the search path. This setting is the basis for other commands of 'epicalc' including 'des', 'summ', 'recode', 'label.var' etc.

Так что вы должны сделать, это:

set.seed(45) 
df <- data.frame(x=sample(1:3, 20, replace=T), y=sample(20)) 

use(df) # first to copy this to .data and attach. 
recode(x, 2, NA, df) # not it should work without errors 

#  x y 
# 1 NA 15 
# 2 NA 6 
# 3 NA 3 
# 4 3 8 
# 5 NA 1 
# 6 NA 16 
# 7 3 5 
# 8 3 9 
# 9 1 10 
# 10 3 20 
# 11 NA 11 
# 12 1 4 
# 13 NA 2 
# 14 NA 12 
# 15 1 13 
# 16 3 17 
# 17 NA 18 
# 18 3 19 
# 19 1 7 
# 20 1 14 
+0

Хотя ошибка исчезла, мое максимальное значение теперь остается 99? '> использование (ESSround5) > recode (trstlglR, 99, NA, ESSround5) > сводная информация (trstlglR) Min. 1-й кв. Средний средний 3-й Ку. Максимум. 0.0000 0.0000 0.0000 0.1798 0.0000 99.0000' – Marloes

+0

Вы уверены, что есть значения> 99? Я отредактировал сообщение, чтобы показать результат для моего примера. И, кажется, все правильно. – Arun

+0

Не больше 99, только точно 99. Это обязательно, так как max = 99 в сводке. Должны ли они быть больше? – Marloes

Смежные вопросы