Jestem nowicjuszem w wersji R i próbuję usunąć zduplikowane kolumny z dużej ramki danych (50 wierszy, 215 kolumn). Ramka zawiera mieszankę dyskretnych zmiennych ciągłych i kategorycznych.Identyfikowanie duplikatów kolumn w ramce danych R
Moje podejście było wygenerować tabelę dla każdej kolumny w ramce do listy, a następnie użyj funkcji duplicated()
znaleźć wiersze w liście, które są duplikatami, co następuje:
age=18:29
height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
gender=c("M","F","M","M","F","F","M","M","F","M","F","M")
testframe = data.frame(age=age,height=height,height2=height,gender=gender,gender2=gender)
tables=apply(testframe,2,table)
dups=which(duplicated(tables))
testframe <- subset(testframe, select = -c(dups))
Ten ISN” t bardzo wydajny, szczególnie w przypadku dużych zmiennych ciągłych. Jednak Poszedłem na dół tą drogą, ponieważ byłem w stanie uzyskać ten sam efekt przy użyciu Podsumowanie (uwaga dodaje zakłada oryginalną testframe
zawierające duplikaty):
summaries=apply(testframe,2,summary)
dups=which(duplicated(summaries))
testframe <- subset(testframe, select = -c(dups))
Po uruchomieniu tego kodu będziesz zobacz tylko usuwa pierwszy znaleziony duplikat. Zakładam, że dzieje się tak dlatego, że robię coś złego. Czy ktokolwiek może wskazać, gdzie idę źle, a nawet lepiej, wskazać mi w kierunku lepszego sposobu na usunięcie zduplikowanych kolumn z ramki danych?
oprócz @kohske „s sugestię użyć' digest', to może wystarczyć, aby używać 'C' zamiast' su mmary' jako funkcja 'lapply'. – BenBarnes
Należy zauważyć, że podsumowanie dla wektorów znaków będzie generować to samo podsumowanie, nawet jeśli są różne. Dzieje się tak dlatego, że podsumowanie na wektorze znaków wyprowadza tylko długość wektora – hshihab