Vorrei identificare le colonne binarie in un data.frame.Identifica colonne binarie
Ad esempio, questa tabella
my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
darebbe FALSE, FALSE, TRUE
Vorrei identificare le colonne binarie in un data.frame.Identifica colonne binarie
Ad esempio, questa tabella
my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
darebbe 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) })
se si desidera consentire per NA
valori)
Se si desidera accettare colonne binari con NA in loro, il seguente dovrebbe fare il trucco:
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 se si accettano solo 0,1, NA:
is.binary <- function(v) {
x <- unique(v)
length(x) - sum(is.na(x)) == 2L && all(x[1:2] == 0:1)
}
vedere il mio commento di cui sopra - penso basando 'binario' su 'lunghezza (unica (x)) == 2' potrebbe essere pericoloso. .. –
... così ho aggiunto un'altra versione che accetta solo 0/1/NA. – Tommy
OK, scusa, mi sono perso. –
potrei provare a cattura le variabili binarie con livelli diversi da 0,1 con la funzione (x) length (unique (x))> 2. può essere? – Seth
E se non sono tutti codificati con 0,1 puoi controllare 'length (unique (x)' solo per due valori – joran
@Seth, @Joran, quelli sono idee carine, ma se la tua tabella fosse 'matrix (c (0,1,0,1,1,2), nrow = 3) "vorresti che la seconda colonna venisse rilevata come binaria? Dovresti essere un po 'più cauta. Cioè, immagino dipenda da come .. si definisce "binario" –