Mam ramkę danych o nazwie „nowa cena” (patrz poniżej) i chcę zmienić nazwy kolumn w moim programie w języku R.
> newprice
Chang. Chang. Chang.
1 100 36 136
2 120 -33 87
3 150 14 164
W rzeczywistości robię to:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
Nie umieściłem tego w pętli, ponieważ chcę, aby nazwa każdej kolumny była inna, jak widzisz.
Po wklejeniu mojego programu do konsoli R jest to dane wyjściowe:
> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"
Próbowałem równie dobrze, c()
na przykład c("premium")
, zamiast paste()
funkcji, ale bezskutecznie.
Czy ktoś mógłby mi pomóc to rozgryźć?
is.matrix
lubstr
.colnames(newprice)<- c("premium","change","newprice")
Odpowiedzi:
Użyj
colnames()
funkcji:Możesz także podzielić:
źródło
colnames(X)[c(1,2)] <- c("good", "better")
setnames()
wdata.table
pakiecie. Użyj czegoś takiego jaksetnames(DT,"b","B")
lubsetnames(DT,c("a","E"),c("A","F"))
q1
, próba zmutowania ramki danych za pomocądplyr
asq1 <- q1 %>% mutate(rel_count = count / 482462)
powoduje błądError in mutate_impl(.data, dots) : unknown column 'days'
(gdziedays
nowa kolumna jest nadawana). To jest naprawdę frustrujące.Używam tego:
źródło
Błąd jest spowodowany przez „inteligentne cytaty” (lub jakkolwiek się je nazywa). Lekcja brzmi: „nie pisz kodu w„ edytorze ”, który konwertuje cudzysłowy na inteligentne”.
Ponadto nie potrzebujesz
paste("premium")
(wezwanie dopaste
jest zbędne) i dobrym pomysłem jest umieszczenie spacji,<-
aby uniknąć nieporozumień (npx <- -10; if(x<-3) "hi" else "bye"; x
.).źródło
Czy próbowałeś tylko:
names(newprice)[1]<-"premium"
?
źródło
Nowym zalecanym sposobem na to jest użycie
setNames
funkcji. Zobaczyć?setNames
. Ponieważ tworzy to nową kopiędata.frame
, należy przypisać wynik do oryginałudata.frame
, jeśli taka jest Twoja intencja.Nowsze wersje R ostrzegają, jeśli używasz
colnames
niektórych sposobów sugerowanych przez wcześniejsze odpowiedzi.Gdyby to był
data.table
zamiast tego, można użyćdata.table
funkcjisetnames
, która może modyfikować określone nazwy kolumn lub nazwy pojedynczej kolumny przez odniesienie :źródło
Miałem ten sam problem i ten fragment kodu zadziałał dla mnie.
W skrócie, ten kod wykonuje następujące czynności:
names(data)
sprawdza wszystkie nazwy w dataframe (data
)[names(data) == oldVariableName]
wyodrębnia nazwę zmiennej (oldVariableName
), której nazwę chcesz zmienić, i<- "newVariableName"
przypisuje nową nazwę zmiennej.źródło
Podobne do innych:
Dość prosty i łatwy do modyfikacji.
źródło
próbować:
źródło
Jeśli musisz zmienić nazwę nie wszystkich, ale wielu kolumn jednocześnie, gdy znasz tylko stare nazwy kolumn, możesz użyć
colnames
funkcji i%in%
operatora. Przykład:Teraz chcesz zmienić „zły” i „najgorszy” na „dobry” i „najlepszy”. Możesz użyć
To skutkuje
źródło
Użyj tego, aby zmienić nazwę kolumny według funkcji colname.
źródło
Możesz po prostu dokonać edycji przez:
i ręcznie zmień nazwę kolumny.
źródło
> locanatmodelset<-edit(locanatmodelset) Error in edit.data.frame(locanatmodelset) : can only handle vector and factor elements
Moje nazwy kolumn są jak poniżej
Chcę zmienić nazwę kolumny Class and Sex
źródło
Istnieje kilka opcji z
dplyr::rename()
idplyr::select()
:Istnieją również trzy warianty o zasięgu
dplyr::rename()
:dplyr::rename_all()
dla wszystkich nazw kolumn,dplyr::rename_if()
dla warunkowo kierowanych nazw kolumn idplyr::rename_at()
dla wybranych nazwanych kolumn. Poniższy przykład zastępuje spacje i kropki znakiem podkreślenia i konwertuje wszystko na małe litery:dplyr::select_all()
można również użyć w podobny sposób:źródło
Tylko w celu poprawienia i nieznacznego rozszerzenia odpowiedzi Scott Wilson.
Możesz także użyć
setnames
funkcji data.table w data.frames.Nie należy oczekiwać przyspieszenia operacji, ale można oczekiwać, że
setnames
będzie ona bardziej wydajna pod względem zużycia pamięci, ponieważ aktualizuje nazwy kolumn przez odwołanie. Można to śledzić za pomocąaddress
funkcji, patrz poniżej.Więc jeśli osiągasz limit pamięci, możesz rozważyć użycie tego.
źródło
Może to być pomocne:
źródło
W przypadku, gdy mamy 2 ramki danych, następujące prace
Zmieniamy nazwy DF1 w następujący sposób
źródło