Задание диапазона значений NA в нескольких столбцах (ограничено базовым и автомобильным пакетом) - PullRequest
1 голос
/ 17 августа 2011

Как я могу сделать какое-то массовое перекодирование набора данных в R, используя только базовый, автомобильный и сторонний пакеты?Я работаю на государственном компьютере, поэтому не могу установить дополнительные пакеты, чтобы сделать это проще.В идеале, я хотел бы иметь возможность предоставить фрейм данных для функции перекодировки автомобиля или применить функцию перекодирования ко всем / большинству переменных в фрейме данных.Я пытаюсь понять, как сделать это с помощью функции apply / lapply, но я не знаю, как их использовать, и не добился большого успеха.Идея выглядит следующим образом, хотя этот код не работает:

для векторов со 2 по 92 во фрейме данных "df":

df<-recode(df[2:92], '98:100=NA)

Есть предложения?Я очень ценю это.

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Возможно:

is.na( df[, 2:92] ) <- df[ ,2:92] >= 98 & df[, 2:92] <= 100

is.na () может принимать присваивание, и в этом случае это функция is.na<-, для которой требуется логический вектор, матрица или массив того же экстента, что и у цели.Я попробовал функцию %in%, но она не была должным образом векторизована (или, возможно, переведена в матрицу?) Для выполнения работы.Я подумал, может быть, просто использовать номера столбцов, как пытался Джо, сработает, но также не добился успеха на этом пути.

1 голос
/ 17 августа 2011

Я собираюсь интерпретировать ваш вопрос как попытку изменить подмножество столбцов в подмножестве строк.

Попытка:

df[c(2:92), c(98:100)] <- NA

Вы можете поднабор столбцов так же, как вы можете поднабор строк и присваивать им значения.

Edit: Этот вопрос решается в здесь

Чтобы просто сделать подмножество кадра данных:

df2 <- within(df[2:92,], a <- recode(a, 'c("a","b","c")="a"'))

...