Programuję w języku R. Chciałbym zmienić format (klasa) niektórych kolumn mojego obiektu data.frame (mydf
) z charactor na czynnik. Nie chcę tego robić, gdy czytam plik tekstowy przez funkcję read.table()
. Każda pomoc będzie doceniona.Konwertuj format kolumny danych.frame z postaci na czynnik
Odpowiedz
Cześć witamy w świecie R.
mtcars #look at this built in data set
str(mtcars) #allows you to see the classes of the variables (all numeric)
#one approach it to index with the $ sign and the as.factor function
mtcars$am <- as.factor(mtcars$am)
#another approach
mtcars[, 'cyl'] <- as.factor(mtcars[, 'cyl'])
str(mtcars) # now look at the classes
ta działa również w charakterze, dat, liczb i innych klas
Ponieważ jesteś nowy R Sugeruję masz spojrzeć na tych dwóch stronach internetowych:
R podręczniki: http://cran.r-project.org/manuals.html
R Reference kartka:http://cran.r-project.org/doc/contrib/Short-refcard.pdf
Dzięki! ale mam inny problem. Mam nazwę każdej kolumny w tablicy znaków col_names []. Jak mogę użyć powyższego polecenia (ani 'mydf $ col_names [i]' ani 'mydf [, col_names [i]]' nie działa.) – Rasoul
@Rasoul, 'mydf [, col_names]' zrobi to – DrDom
+ 1 dla ref. Jest to podstawowa kwestia, o którą można zapytać, ale dobrze jest też mieć świadomość ogromnej pracy, która została włożona w te (i podobne) prace. –
# To do it for all names
df[] <- lapply(df, factor) # the "[]" keeps the dataframe structure
col_names <- names(df)
# do do it for some names in a vector named 'col_names'
df[col_names] <- lapply(df[col_names] , factor)
Wyjaśnienie. Wszystkie ramki danych są listami, a wyniki [
używane z argumentami o wielu wartościach są również listami, więc zapętlenie list jest zadaniem lapply
. Powyższe zadanie będzie utworzyć zestaw list, że funkcja data.frame.[<-
powinny skutecznie przykleić z powrotem do dataframe, df
Inną strategią byłoby przekształcić tylko te kolumny, gdzie liczba unikalnych przedmiotów jest mniejsza od pewnego kryterium, powiedzmy, mniej niż logarytmu liczby wierszy jako przykład:
cols.to.factor <- sapply(df, function(col) length(unique(col)) < log10(length(col)))
df[ cols.to.factor] <- lapply(df[ cols.to.factor] , factor)
Każdy z nich powinien działać. Właśnie sfałszowałem twoje stwierdzenie, że "musi być" tak, jak mówisz, próbując z 'imionami <- c ('vs', 'am', 'gear'); mtcars [, nazwy] <- lapply (mtcars [, names], factor) '.. Może powinieneś być bardziej ostrożny z krytyką swoich starszych. –
To bardzo dobre rozwiązanie! Może również działać z numerami kolumn, co może być szczególnie przydatne, jeśli chcesz zmienić wiele, ale nie wszystkie. Np. Col_nums <- c (1, 6, 7: 9, 21:23, 27:28, 30:31, 39, 49:55, 57), a następnie df [, col_nums] <- lapply (df [, col_nums] czynnik). – WGray
Zastrzeżenie: pierwsze rozwiązanie nie działa, jeśli "length (col_names) == 1'. W takim przypadku 'df [, col_names]' jest automatycznie degradowane do wektora zamiast do listy o długości 1, a następnie 'lapply' próbuje działać na każdym wpisie, a nie na kolumnie jako całości. Można temu zapobiec, używając 'df [, col_names, drop = FALSE]'. –
Jeśli chcesz zmienić wszystkie zmienne znak w data.frame czynników po już załadowane dane, można to zrobić w ten sposób do data.frame o nazwie dat
:
character_vars <- lapply(dat, class) == "character"
dat[, character_vars] <- lapply(dat[, character_vars], as.factor)
To tworzy wektor określający, które kolumny są klasy character
, a następnie stosuje as.factor
do tych kolumn.
dane próbki:
dat <- data.frame(var1 = c("a", "b"),
var2 = c("hi", "low"),
var3 = c(0, 0.1),
stringsAsFactors = FALSE
)
Pełna konwersja każdej zmiennej znakowej do czynnika zwykle dzieje się podczas odczytu w danych, np. Z 'stringamiAsFactors = TRUE', ale jest to przydatne, gdy mówisz, czytałeś dane z' read_excel() 'z' readxl' pakiet i chcesz wytrenować losowy model lasu, który nie akceptuje zmiennych znaków. –
Kolejny krótki sposób można użyć jest rura (%<>%
) od magrittr opakowaniu. Konwertuje kolumnę znaków mycolumn na współczynnik.
library(magrittr)
mydf$mycolumn %<>% factor
Edytuj i uzyskaj więcej informacji. Tylko kod i odpowiedź "spróbuj tego" są odradzane, ponieważ nie zawierają treści do wyszukiwania i nie wyjaśniają, dlaczego ktoś powinien "spróbować tego". Staramy się być źródłem wiedzy. –
pls, jeśli chcę go używać do wszystkich kolumn mojego df? –
Robię to z funkcją. W tym przypadku będę przekształcić tylko zmienne znakowe czynnik:
for (i in 1:ncol(data)){
if(is.character(data[,i])){
data[,i]=factor(data[,i])
}
}
- 1. Przekształcanie danych.frame z szerokiego na długi format
- 2. Konwertuj tiff na format jpg
- 3. Konwertuj DateTime na określony format
- 4. Konwertuj plik .AIB (plik indeksowania multimediów) na czytelny format (String)
- 5. Konwertuj C# DateTime na format MongoDB
- 6. Konwertuj datetime na nvarchar, ale zachowaj format
- 7. Konwertuj zmiennoprzecinkowe na GG: MM format
- 8. MySQL - Format kolumny daty
- 9. Konwertuj datownik z długim na normalny format daty
- 10. Konwertuj wsadowo kolumny na typ numeryczny
- 11. Konwertuj dane wiersza na kolumny binarne
- 12. Jak podzielić listę danych.frame i zastosować funkcję do jednej kolumny?
- 13. format klina łamie adnotacje w postaci linta
- 14. jqGrid: Format liczbowy z przecinkiem w postaci kropki dziesiętnej
- 15. Konwertuj typ kolumny DataFrame z ciągu na datetime
- 16. R - Konwertuj różne zmienne pozorne/logiczne na pojedynczą kategorialną zmienną/czynnik od ich nazwy
- 17. Konwertuj kolumny danych do MultiIndex
- 18. Konwertuj łańcuch oktetów snmp na format daty czytelnej dla człowieka
- 19. przeszukiwanie wszerz rozgałęzienia czynnik
- 20. Konwertuj datę na format "dd-MMM-yyyy" C#
- 21. Konwertuj izom na mp42
- 22. Błąd usuwania kolumna czynnik w pusty data.table
- 23. Format danych: aby kolumny na wiersze (i odwrotnie)
- 24. Podział danych.frame na podstawie poziomów współczynnika na nowe dane.frames
- 25. Konwertuj NSData na ciąg?
- 26. Jak zmienić format czasu kolumny w fullcalendar?
- 27. Łańcuch jako czynnik w R
- 28. Hrabia przez czynnik wykresie ggplot2
- 29. wypełnienia kolumny z poprzedniej kolumny jeśli NA
- 30. Konwertuj kolumnę Pandy na DataTime
mydf $ myfavoritecolumn <- as.factor (mydf $ myfavoritecolumn) –
Dziękujemy! ale mam inny problem. Mam nazwę każdej kolumny w tablicy znaków col_names []. Jak korzystać z powyższego polecenia (mydf $ col_names [i]) nie działa. – Rasoul
W jaki sposób można to zrobić automatycznie dla wszystkich zmiennych znakowych, ponieważ data.frame robi to z ciągami znakówSsFactors? –