2014-08-28 81 views
3

我想知道是否有更好的方法來做到這一點,或者如果我可能會遇到一些無法預料的麻煩。我需要從數據框子集,但我不想使用列名稱。我需要通過參考列號來做到這一點。子集數據框不使用列名

data <- data.frame(col1= c(50, 20, NA, 100, 50), 
        col2= c(NA, 25, 125, 50, NA), 
        col3= c(NA, 100, 15, 55, 25), 
        col4= c(NA, 30, 125, 100, NA), 
        col5= c(80, 25, 75, 40, NA)) 

假設我要子集的數據幀,只保留包含3倍連續的NA前5列有效的數字排盡我所能想出不使用的列名是這樣的:

sub <- data[(which(is.na(data[2]) & 
        is.na(data[3]) & 
        is.na(data[4]) & 
        !is.na(data[5]))), ] 

任何人看到任何麻煩或知道更好的方法嗎?我很擔心在子集內使用子集,儘管每個事物似乎都在按照它應該的方式工作。

回答

4

如果你正在尋找凝聚你的代碼一點,你可以這樣做:

> data[rowSums(is.na(data[2:4])) == 3 & !is.na(data[5]), ] 
    col1 col2 col3 col4 col5 
1 50 NA NA NA 80 
+0

爲什麼列1被排除在考慮? – 2014-08-28 18:29:42

+0

@BondedDust,因爲它看起來就是OP基於他們的代碼之後(儘管他們的描述有點模糊)。 – A5C1D2H2I1M1N2O1R2T1 2014-08-28 18:30:40

+0

(+1)我剛剛在12分鐘後完成了這個確切代碼。順便說一句,'soread()'是一個非常有用的功能。 :-) – 2014-08-28 18:39:03