2012-02-20 15 views
8

Stata ma polecenie o nazwie compress, które przegląda wszystkie wiersze danych i próbuje przymusić je do najbardziej wydajnego formatu. Na przykład, jeśli masz zbiór liczb całkowitych zapisanych jako wektor znaków w data.frame, to zmusi to do liczby całkowitej.R jest odpowiednikiem polecenia "compress" Staty?

Mogę sobie wyobrazić, jak można napisać taką funkcję w R, ale czy już istnieje?

+2

Łatwo byłoby napisać kod, który testowałby integer-ness i przymus, jeśli niektóre określone ułamki wartości nie były NA, ale myślę, że ogólna odpowiedź brzmi "nie". –

+0

To też było moje myślenie. Sztuką byłoby napisać skuteczny kod, aby nie trwało wiecznie. Regeksy byłyby oczywistym sposobem na rozpoczęcie, ale może być zbyt wolny. –

+0

Jeśli testowałeś używając długości (poziomy (czynnik())) i konwertowałeś na czynnik iff, którego wartość była mniejsza niż 20% długości hte wektora, możesz również uzyskać oszczędność miejsca. Podobnie możesz sprawdzić, jaka część wektora, vrc, ma wartości == trunc (vec), może to być test na to, czy wymuszenie liczby na liczbę całkowitą byłoby rozsądne. Nie widziałem zbyt wiele możliwości zastosowania metod wyrażeń regularnych, ale być może znowu jestem tępy. –

Odpowiedz

8

Technicznie, read.table robi dokładnie to z pomocą type.convert. Więc można użyć tego - nie jest to najbardziej efektywny sposób, ale chyba najprostszy:

df <- as.data.frame(lapply(df ,function(x) type.convert(as.character(x)))) 

W praktyce może lepiej byłoby to zrobić selektywnie, choć, więc trzeba tylko dotknąć znaki/czynniki:

for (i in seq.int(df)) if (is.factor(df[[i]]) || is.character(df[[i]])) 
    df[[i]] <- type.convert(as.character(df[[i]])) 
Powiązane problemy