2015-01-06 62 views
1

我對R非常陌生,我很努力去理解如何以特定方式省略NA值。我有一個很大的數據框與多列(最多40)和行(最多200ish)。我想使用其中一列的數據來做簡單的統計(wilcox.test,boxplot等):一列有連續變量(V1),而另一列有二進制變量(V2; 0或1),其中分爲2組。我想爲連續變量使用不相關的不同V2二進制變量做到這一點。我在Excel中組織這些數據,將其保存爲CSV並使用R Studio。當分析數據來自一個非常大的數據幀的2列時,在特定行中省略NA

所有這些列都有散佈的NA值,而且當我使用omit.na時,它會將NA值存在的每一行都取下,這會消除可怕的數據負載。有沒有簡單的解決方案來做到這一點?我已經看到類似主題的一些答案,但沒有一個看起來完全是我需要做的。

非常感謝您的任何答案。再次,我是R的寶貝級新手,可能忽略了其他主題中的某些內容!

+0

那麼你想要的輸出是什麼呢?你想要刪除一整行取決於只有在某些列而不是整個數據集的「NA」值? –

+0

大衛嗨!確切地說,我想省略每一個配對結果,也就是說,如果我在任何一行中只考慮兩列感興趣的列(V1和V2,比V1和V3等等),我想省略整行wilcox測試可以正常工作,而無需爲每對列創建單獨的CSV並在每個df中運行na.omit。非常感謝您的幫助! –

回答

0

您可以根據您喜歡的任何規則操作data.frame來省略。例如:

dirty.frame <- data.frame(col1 = c(1,2,3,4,5,6,7,NA,9,10), col2 = c(10, 9, 8, 7,6,5,4,3,2,1)) 
cleaned.frame <- dirty.frame[!is.na(dirty.frame$col1),] 

此代碼使用is.na()來測試特定列中的行是否爲na。 !!意思不是,並且會省略那一行。

1

如果我明白了,您想每次都將功能應用於一對列。

wilcox.test(V1,V2) 
wilcox.test(V1,V3)... 

其中Vi沒有缺失值。我會做這樣的事情:

## use complete.cases to assert that you have no missing values 
## for the selected pair 
apply_clean <- 
function(x,y){ 
     ok <- complete.cases(x, y) 
     wilcox.test(x[ok],dat$V1[ok]) 
} 
## apply this function to all columns after removing the continuous column 
lapply(subset(dat,select=-V1),apply_clean,y=dat$V1) 
+0

嗨!感謝你的回答。我會嘗試這個並回發! –

+0

嗨,稍作澄清:如果我在V1和V2,V1和V3等等(V1是連續的,V2/3/etc是二進制的)工作(做wilcox,boxplot等),我會使用相同的V1,還是將na遺漏「堆棧」,即,當我在V1和V3上工作時,我只有NAs(V2)+ NAs(V3)而不是NAs(V3)?對不起,如果這聽起來很基本,但我仍然要抓住R.非常感謝! –

+0

另一個問題:V1也有NA值。對不起,不清楚。理想情況下,我實際上會有「多個」V1,即具有連續變量的若干列,然後在被「幾個」V2中的二進制組劃分時進行測試。 –

相關問題