Два вопроса о форматировании данных для R - PullRequest
3 голосов
/ 28 июня 2011

У меня есть два вопроса, оба довольно простые, я думаю, имея дело с R.

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

a[a[,21]==0,5:10] <-NA

ошибка говорит:

Ошибка в [<-. Data.frame (<em> tmp , a [, 21] == 0, 5:20, значение = NA): пропущенные значения недопустимы в подписанных назначениях фреймов данных

По сути, этот код должен принимать любое значение 0 в столбце 21 и заменять значения для этой строки из столбцов с 5 по 10 на NA. В колонке 21 уже есть NA, но я не уверен, что это что-то делает?

Я вообще не уверен, как создать эту следующую функцию. Мне нужно манипулировать данными, содержащими положительный и отрицательный контроль. Однако когда я манипулирую данными, я не хочу, чтобы значения положительного и отрицательного элементов управления были отделены от манипуляции, но я хочу, чтобы положительные и отрицательные элементы управления оставались в столбцах, потому что я должен использовать их позже. Есть ли способ временно игнорировать эти значения, чтобы они не были включены в манипуляцию?

Вот пример данных:

L = c(2,1,4,3,1,4,2,4,5,1) 
R = c(2,4,5,1,"Neg",2,"",1,2,1) 
T = c(2,1,4,2,"CTRL",2,"PCTRL",2,1,4) 
test <- data.frame(L=L,R=R,T=T)

Я хотел бы иметь возможность временно игнорировать эти строки, основываясь на символах "Neg", "CTRL" / "" "PCTRL", а не на их позиции во фрейме данных, если это возможно. Обратите внимание, что для отрицательного контроля Neg и CTRL находятся в отдельных столбцах, в одной строке, так же, как положительный контроль, где в отдельных столбцах есть пробел и PCTRL, но в одинаковых строках. Любой способ сделать это, учитывая эти странные условия?

Надеюсь, это было написано достаточно четко, и я заранее благодарю всех, кто нашел время, чтобы помочь мне!

Ответы [ 3 ]

5 голосов
/ 28 июня 2011

Попробуйте это для подстановки вашего фрейма данных в те строки, где R не является "Neg":

subset(test, R!="Neg")

Для проблемы NA у вас, вероятно, уже есть NA в вашем фрейме данных, верно?Попробуйте, если это работает:

a[a[,21] %in% 0, 5:10] <- NA
4 голосов
/ 28 июня 2011

Попробуйте вместо:

a[ which(a[,21]==0), 5:10] <-NA

Объяснение: операция == возвращает значения NA, а функция [<- не принимает их.Функция which вернет числовой вектор и "отбросит NA".Кроме того, функция [ (без '<-') вернет все строки NA.Это считается «функцией», но я считаю, что это «раздражение», поэтому я обычно буду использовать <code>which для выбора, а также для выборочного назначения.

3 голосов
/ 28 июня 2011

Для первой проблемы: если a [, 21] отрицательно, вы хотите назначить NA?В этом случае

a[replace(a[,21],is.na(a[,21]),0)==0,5:10] <- NA

В противном случае (обратите внимание, что я заменил значение замены «0» на что-то ненулевое (здесь используется «1», но на самом деле это не имеет значения, если не ноль),

a[replace(a[,21],is.na(a[,21]),1)==0,5:10] <- NA

Что касается второй проблемы,

subset(test,! (L %in% c("Neg","") | T %in% c("CTRL","PCTRL")))

Если условия фильтрации в L и T не всегда совпадают. Если они всегда совпадают, то вы можете просто применитьпроверка на один из L или T. Также вы можете иметь в виду, что T использовался для обозначения TRUE в S, S-PLUS и R (все еще делает); вы можете переназначитьдругое значение для T, и все будет хорошо, но я считаю, что это вообще не рекомендуется (то же самое для c, который люди также любят назначать).

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