Chciałbym zidentyfikować kolumn binarnych w data.frame.Identyfikacja kolumn binarnych
Na przykład, tabela ta
my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
dałoby FALSE, FALSE, TRUE
Chciałbym zidentyfikować kolumn binarnych w data.frame.Identyfikacja kolumn binarnych
Na przykład, tabela ta
my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
dałoby FALSE, FALSE, TRUE
apply(my.table,2,function(x) { all(x %in% 0:1) })
(lub
apply(my.table,2,function(x) { all(na.omit(x) %in% 0:1) })
jeśli chcesz zezwolić na NA
wartości)
Jeśli chcesz zaakceptować binarne kolumny z NA w nich, co następuje powinno załatwić sprawę:
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
... lub jeśli tylko przyjąć 0,1, NA:
is.binary <- function(v) {
x <- unique(v)
length(x) - sum(is.na(x)) == 2L && all(x[1:2] == 0:1)
}
zobacz mój komentarz powyżej - myślę, że opieranie "binarny" na "długość (unikalny (x)) == 2" może być niebezpieczne. .. –
... więc dodałem kolejną wersję, która akceptuje tylko 0/1/NA – Tommy
OK, przepraszam, przegapiłem to. –
mogę spróbować przechwytuje zmienne binarne o różnych poziomach niż 0,1 z długością funkcji (x) (unique (x))> 2. może? – Seth
A jeśli nie wszystkie są zakodowane za pomocą 0,1, możesz sprawdzić "długość (unikalna (x)" tylko dla dwóch wartości: – joran
@Seth, @Joran, to są fajne pomysły, ale jeśli twój stół to 'matrix (c (0,1,0,1,1,2), nrow = 3) "czy chcesz, aby druga kolumna została wykryta jako binarna? Trzeba by być trochę bardziej ostrożnym, to jest, myślę, że to zależy jak definiujesz "binarny" –