我想知道,如果我可以检查数据框的列是以0
还是1
开头,直到行数而不会破坏序列。下面是一个示例数据框。
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
。 。因此,序列以0
或1
开头,直到每行增加1的行数。
答案 0 :(得分:3)
您可以使用sapply
遍历列。创建一个函数来检查是否有任何NA。如果不是(!any
),我们得到相邻元素之间的差异(diff
),检查所有元素差异是否为1(all(diff(x)==1
)和(&
)列的第一个值是0或1(x[1] %in% 0: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