Me gustaría identificar columnas binarias en un data.frame.Identificar columnas binarias
Por ejemplo, esta tabla
my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
daría FALSE, FALSE, TRUE
Me gustaría identificar columnas binarias en un data.frame.Identificar columnas binarias
Por ejemplo, esta tabla
my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
daría FALSE, FALSE, TRUE
apply(my.table,2,function(x) { all(x %in% 0:1) })
(o
apply(my.table,2,function(x) { all(na.omit(x) %in% 0:1) })
si desea permitir NA
valores)
Si desea aceptar columnas binarias con NA en ellos, lo siguiente debe hacer el truco:
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
... o si sólo aceptará 0,1, NA:
is.binary <- function(v) {
x <- unique(v)
length(x) - sum(is.na(x)) == 2L && all(x[1:2] == 0:1)
}
vea mi comentario anterior - Creo que basar 'binario' en 'longitud (único (x)) == 2' podría ser peligroso. .. –
... así que agregué otra versión que solo acepta 0/1/NA. – Tommy
OK, perdón, lo perdí. –
podría tratar de capturar variables binarias con diferentes niveles de 0,1 con la longitud de la función (x) (único (x))> 2. ¿tal vez? – Seth
Y si no están todos codificados con 0,1, puede verificar 'length (unique (x)' para solo dos valores. – joran
@Seth, @Joran, esas son buenas ideas, pero si su tabla fuera 'matrix (c (0,1,0,1,1,2), nrow = 3) '¿quieres que la segunda columna se detecte como binaria? Tendrás que tener un poco más de cuidado. Es decir, supongo que depende de cómo usted define "binario". –