2013-12-15 48 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 

and for levels()

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