2013-03-08 50 views
1

我正在優化我的數據框以擺脫無用的變量。第一步我做的是去除具有比其行作爲NA值的一半以上列,使用這個命令:刪除大量零的列

limit <- nrow(mydata)/2 
mydata <- mydata[, which(as.numeric(colSums(!is.na(mydata))) > limit)] 

我很期待作出零同樣的事情,但我無法找到一個功能像「is.zero()」,我該怎麼做?

,我很期待做的另一件事,是去除重複的任何值不是「限制」倍以上任一列(如果這樣的命令存在,它是理想的!)

非常感謝,

回答

4

只要做到:

mydata <- mydata[, which(as.numeric(colSums(mydata != 0)) > limit)] 

至於去除重複任何價值超過 「極限」 次欄,您可以使用tableanyapply

mydata <- mydata[, which(apply(mydata, 2, function(col) !any(table(col) > limit)))] 

最後,請注意,這兩種情況下的which是可選的,並且第一種情況下的as.numeric是不必要的。你可以簡單地做:

mydata <- mydata[, colSums(mydata != 0) > limit] 
2

爲了尋找非零,只需用mydata != 0取代!is.na(mydata)

爲了獲得最頻繁的部件的數量,你可以使用:

> mydata <- c(1,2,3,4,1,1,1,2,1,3) 
> sort(table(mydata), decreasing=T)[[1]] 
[1] 5 

要看到,重複最多的實際值:

> names(sort(table(mydata), decreasing=T)[1]) 
[1] "1" 

如果你不關心保護值,你可以使用max()而不是sort()

> max(table(mydata)) 
[1] 5 
+0

謝謝,我的大腦停止工作f或某種原因! 你認爲有辦法做到這一點的第二部分?我的意思是刪除任何值不斷重複,而不是指定「零」或什麼? – Error404 2013-03-08 15:28:40

+0

@ Error404:請參閱編輯。 – NPE 2013-03-08 15:30:35

+0

爲什麼要對錶格進行排序而不是使用'max'? (或者,因爲你正在測試是否超過閾值,所以'any'?) – 2013-03-08 15:36:54