2011-06-28 56 views
3

我有兩個問題的問題,都是很簡單我相信處理R.兩個數據格式化的R

我想創建一個IF語句,將在一列分配NA值一定行。我曾嘗試下面的命令:

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

錯誤說:

錯誤[< -.data.frame(TMP,A [21] == 0,5:20 ,值= NA):缺失值未在數據的下標分配允許幀

本質上是代碼應該採取在列21中的任0的值,和從第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) 

我希望能夠基於字符「負極性」「CTRL」 /「」「PCTRL」,而不是他們的位置暫時忽略這些行數據幀如果可能的話。注意陰性對照如何,Neg和CTRL分別在同一行的單獨列中,就像積極控制一樣,在單獨列和同一行中存在空白和PCTRL。鑑於這些奇怪的條件,有什麼辦法可以做到這一點?

希望這篇文章寫得夠清楚了,我很感謝任何人花時間幫助我!

+1

比較'a [,21] == 0'將是'NA',其中'a [,21]'的元素是'NA';我們不知道這些元素是否等於'0',因爲我們不知道這些元素是什麼。這給你一個包含'TRUE'和'FALSE'的向量,其中'a [,21]'不等於零,**加**'NA',其中'a [,21]'是'NA'。這會導致您嘗試使用「NA」分配* assign *,這是不允許的。 –

回答

3

對於第一個問題:如果一個[,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"))) 

如果在LT的過濾條件並不總是一致的。如果他們總是一致的,那麼你就可以Ĵ ust將測試應用於LT之一。另外,你也可能要記住,在S,S-PLUS和R(仍然)中,T用於代表TRUE;你可以重新分配T的另一個值,事情會好起來的,但我相信它通常是不鼓勵的(c也是如此,人們也喜歡分配它)。

+0

嗨Crippledlambda,非常感謝您的回答,它真的幫助了很多。我不想開始一個全新的線程,所以我要複製和粘貼我評論過的部分內容alexx hardt – Tim

+0

感謝您的出色代碼並回答所有人。我想確保這種方式按照我認爲的方式工作,因爲我不確定我原來是否清楚地表達了這一點。所以我希望我的控件擺脫操作,但我希望它們能夠重新插入和操作。爲了演示一個例子,我對數據進行控制的操作如下:(L/R)/中值(L/R)。我想對控件發生同樣的操作,但它會是(CL/CR)/中值(L/R)。 CL =來自L列的控制值,CR =來自R值的控制值。道歉沒有明確說明這一點 – Tim

5

嘗試此子集劃分您的數據幀的那些行,其中R是不是「負極性」:

subset(test, R!="Neg") 

對於NA的問題,你可能已經在你的數據幀來港,對嗎?嘗試如果這個工程:

a[a[,21] %in% 0, 5:10] <- NA 
+0

感謝您的優秀代碼並回答所有人。我想確保這種方式按照我認爲的方式工作,因爲我不確定我原來是否清楚地表達了這一點。所以我希望我的控件擺脫操作,但我希望它們能夠重新插入和操作。爲了演示一個例子,我對數據進行控制的操作如下:(L/R)/中值(L/R)。我想對控件發生同樣的操作,但它會是(CL/CR)/中值(L/R)。 CL =來自L列的控制值,CR =來自R值的控制值。道歉沒有明確說明這一點! – Tim

4

嘗試,而不是:

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

說明:==操作返回NA值和[<-函數不接受他們。 which函數將返回一個數字向量並「丟棄NA」。另外,[函數(不包含'< - ')將返回所有NA行。這被認爲是一個'功能',但我覺得它是一個'煩惱',所以我通常會使用which進行選擇以及進行選擇性分配。

+0

是的,很好的電話。這確實適用於分配。對於剛纔的子集,有趣的是,哪個(FALSE)和NA返回不同的東西(所有空數據幀與NAs的行...)。不知道哪一個更好,但要記住我想... – hatmatrix