2015-07-13 106 views
1

我想知道,如果我可以檢查出一列數據幀是否以01開頭,並且在沒有破壞序列的情況下行數達到。以下是一個示例數據框。檢查一列是否包含一個序列

structure(list(X = 1:22, SNR = c(1.0035798429, 11.9438978154, 
NA, 3.2894877794, 4.0170266411, 1.6310522977, 1.6405414787, 1.6625412522, 
0.8489116253, 7.5312259672, 7.2832910726, 0.5732577083, NA, 0.8149754292, 
1.9981020389, 1.2477052103, 0.9960804911, 10.3402683931, 3.6328270728, 
2.5540496855, 41.96873985, 6.2035281045), ID = c(109L, 110L, 
111L, 112L, 113L, 114L, 116L, 117L, 118L, 119L, 120L, 121L, 123L, 
124L, 125L, 126L, 127L, 128L, 130L, 131L, 132L, 133L), SignalIntensity = c(6.8173738339, 
11.5459925418, NA, 9.7804203445, 9.8719842219, 9.0781857736, 
8.2289312163, 8.0435364446, 6.1793458315, 10.5581798932, 10.4745329822, 
4.1572943809, NA, 6.0451742752, 8.3100219509, 7.4558770659, 7.1464749962, 
11.4284386394, 9.6273795753, 9.6807417299, 13.3364944397, 10.4304671876 
)), .Names = c("X", "SNR", "ID", "SignalIntensity"), class = "data.frame", row.names = c(NA, 
-22L)) 

如何檢查列並返回索引(如果存在)。

編輯:我正在尋找的序列是一個自然序列。假設一個數據幀有10行,那麼該列應該有一個序列1,2,3,4,5,6,7,8,9,10或者可以像0,1,2,3,4,5,6,7,8,9。 。因此,序列以01開頭,並且一直到每行增加1的行數爲止。

+0

乾淨的問題,雜亂的樣本數據。 –

+0

沒有打破什麼序列?前導零或一個不會產生序列。 –

+0

@MikeWise說它是一個自然數字的序列 –

回答

3

您可以循環訪問sapply。創建一個函數來檢查是否有任何NAs。如果不是(!any),我們得到相鄰元素之間的差異(diff),檢查列的第一個值是0還是1(x[1] %in% 0:1),是否所有元素差異都是1(all(diff(x)==1)和(&)。如果有任何NA,該列的輸出將爲'FALSE'。

f1 <- function(x) { 
      if(!any(is.na(x))) 
     all(diff(x)==1) & x[1] %in% 0:1 
     else FALSE} 
which(sapply(df, f1)) 
#X 
#1 
+0

這會返回一個索引嗎? –

+0

@MikeWise我以爲OP想要列的邏輯索引。我可能是錯的。 – akrun

+0

如果我有一個數據框的列表,我如何檢查所有 –

相關問題