2013-12-15 3 views
0

У меня есть переменная, называемая «Item», и она имеет уровни, обозначенные как (111, 112, 113, 114 и т. Д.). Каждый предмет повторяется 20 раз по одному для каждого предмета. Элементы находятся в строках, и каждый из них связан с зависимой переменной (RT). Я обнаружил, что некоторые элементы необходимо удалить (высокая частота ошибок). Какие коды следует писать в R, чтобы он удалял или исключал, например, элементы (111, 114, 222 и 319) из фрейма данных, чтобы я мог выполнять анализ без этих элементов и их RT. Я попытался запустить следующие коды с MyData, но они не работали:Удаление помеченных уровней под переменной в R

Deleted <- droplevels(mydata[mydata$Item != "111, 114, 222, 319", ]) 
    summary(Deleted) 

Резюме «удалено» показать еще показать эти пункты

Я также попытался

Deleted <- names(mydata$Item) %in% c("111", "114", "214") 
newdata <- qp[!Deleted] 
summary(newdata) 

Я получаю следующее после сводки

Error in z[[i]] : subscript out of bounds 
In addition: Warning message: 
In max(unlist(lapply(z, NROW))) : 
no non-missing arguments to max; returning -Inf 

и для уровней()

levels(newdata$Item) 
NULL 

Я чувствую, что мне что-то не хватает, но я не могу понять это!

ответ

1

Учитывая mydata следующим образом:

set.seed(1) 
mydata <- data.frame(item=rep(100:400,each=20), RT=sample(0:100,6020, replace=T)) 

Тогда следующая все производят то же самое:

to.delete <- mydata$item %in% c(111,114,222,319)    # two steps 
scrubbed.1 <- mydata[!to.delete,] 

scrubbed.2 <- mydata[!(mydata$item %in% c(111,114,222,319)),] # same, one step 

# @MatthewLundberg's approach (he left out a comma before the right bracket...] 
scrubbed.3 <- droplevels(mydata[!(mydata$item %in% c(111,114,222,319)),]) 

identical(scrubbed.1,scrubbed.2) 
# [1] TRUE 
identical(scrubbed.1,scrubbed.3) 
# [1] TRUE 

Ваш первый подход не удалось потому что вы сравнивали df$item со строкой «111, 114 , 222, 319 ". Ни один из элементов не соответствует этой строке, следовательно никаких исключений.

+0

Я следовал тому, что вы предложили, но mydata закончил исключение всех других независимых переменных (показывает только элементы и RT). Кроме того, маркировка элементов не в порядке. То есть каждый элемент задается с определенным номером, который является ссылкой на условие. Например, у меня есть 5 условий, и каждое условие включает 24 элемента, поэтому условие 1 помечено от 111 до 134, условие 2 (211-234) и так далее. Я думаю, что я должен включить все переменные в функцию set.seed и указать маркировку элемента, но я не уверен, как правильно это сделать. – ama

+0

Чтобы быть понятным, первые две строки кода выше просто создают образец набора данных для иллюстрации метода. Кадр данных 'mydata' в этом примере не имеет * ничего общего * с вашей версией' mydata'. – jlhoward

+0

Второй и третий коды отлично поработали! Спасибо! – ama

0

Я подозреваю, что вы хотите:

Deleted <- droplevels(mydata[!(mydata$Item %in% c(111, 114, 222, 319))]) 
+0

Я пробовал это, но это не сработало. Я получил «Ошибка в' [.data.frame' (mydata,! (Mydata $ Item% in% c (111, 114, 222, 319))): выбрано неопределенные столбцы «Элементы помечены и повторяются в строках как «111, 114 и т. Д.» Как вы думаете, в чем проблема? – ama

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