Dzięki! ale mam inny problem. Mam nazwę każdej kolumny w tablicy znaków col_names []. Jak mogę użyć powyższego polecenia (mydf $ col_names [i]) nie działa.
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
Działa to również w przypadku znaków, dat, liczb całkowitych i innych klas
Ponieważ nie znasz języka R, sugeruję, abyś przyjrzał się tym dwóm stronom internetowym:
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]nie mydf[,col_names[i]]działa, ani nie działa).
+1 dla sędziów. To są podstawowe rzeczy, o które można zapytać, ale dobrze jest też mieć świadomość obszernej 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życia z argumentami o wielu wartościach są również listami, więc zadaniem list jest pętla lapply. Powyższe przypisanie utworzy zestaw list, które funkcja data.frame.[<-powinna z powodzeniem umieścić z powrotem w ramce danych,df
Inną strategią byłoby przekonwertowanie tylko tych kolumn, w których liczba unikalnych pozycji jest mniejsza niż pewne kryterium, powiedzmy, że jest mniejsza niż dziennik liczby wierszy na przykład:
To bardzo fajne 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. Liczba_kol. <- c (1, 6, 7: 9, 21:23, 27:28, 30:31, 39, 49:55, 57), a następnie df [, liczba_kol.] <- lapply (df [, liczba_kol.] , czynnik).
Uwaga: pierwsze rozwiązanie nie działa, jeśli length(col_names)==1. W takim przypadku df[,col_names]jest automatycznie degradowany do wektora zamiast listy o długości 1, a następnie lapplypróbuje wykonać operacje na każdym wpisie, a nie na całej kolumnie. Można temu zapobiec, używając df[,col_names,drop=FALSE].
Możesz użyć dplyr::mutate_if()do konwersji wszystkich kolumn znaków lub dplyr::mutate_at()do wybrania nazwanych kolumn znaków na współczynniki:
library(dplyr)# all character columns to factor:
df <- mutate_if(df, is.character, as.factor)# select character columns 'char1', 'char2', etc. to factor:
df <- mutate_at(df, vars(char1, char2), as.factor)
Jeśli chcesz zmienić wszystkie zmienne znakowe w data.frame na współczynniki po załadowaniu danych, możesz to zrobić w ten sposób, do data.frame o nazwie dat:
Pełna konwersja każdej zmiennej znak do czynnika zwykle bywa przy wczytywaniu danych, na przykład, z stringsAsFactors = TRUE, ale ta jest przydatna, gdy powiedzmy, czytałeś dane ze read_excel()z readxlopakowania i chcą trenować losowy modelu lasu, który nie akceptuje zmienne znakowe.
Edytuj, podając więcej informacji. Odpowiedzi zawierające tylko kod i „wypróbuj to” są odradzane, ponieważ nie zawierają treści, które można przeszukiwać, i nie wyjaśniają, dlaczego ktoś powinien „spróbować tego”. Dokładamy wszelkich starań, aby być źródłem wiedzy.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.