Ответ 1
apply(my.table,2,function(x) { all(x %in% 0:1) })
(или
apply(my.table,2,function(x) { all(na.omit(x) %in% 0:1) })
если вы хотите разрешить значения NA
)
Я хотел бы идентифицировать двоичные столбцы в data.frame.
Например, эта таблица
my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
даст FALSE, FALSE, TRUE
apply(my.table,2,function(x) { all(x %in% 0:1) })
(или
apply(my.table,2,function(x) { all(na.omit(x) %in% 0:1) })
если вы хотите разрешить значения NA
)
Если вы хотите принять двоичные столбцы с NA в них, следующее должно сделать трюк:
is.binary <- function(v) {
x <- unique(v)
length(x) - sum(is.na(x)) == 2L
}
my.table <- data.frame(a=11:15, b=c(T,F,T,NA,T), c=c('foo',NA,'bar','bar','foo'))
vapply(my.table, is.binary, logical(1))
# a b c
#FALSE TRUE TRUE
... или если вы принимаете только 0,1, NA:
is.binary <- function(v) {
x <- unique(v)
length(x) - sum(is.na(x)) == 2L && all(x[1:2] == 0:1)
}