Jak zmienić nazwę pojedynczej kolumny w danych.rama?
Wiem, że jeśli mam ramkę danych z więcej niż 1 kolumną, mogę użyć
colnames(x) <- c("col1","col2")
Aby zmienić nazwę kolumn. Jak mam to zrobić, skoro to tylko jedna kolumna? Oznacza wektor lub ramkę danych z tylko jedną kolumną.
Przykład:
trSamp <- data.frame(sample(trainer$index, 10000))
head(trSamp )
# sample.trainer.index..10000.
# 1 5907862
# 2 2181266
# 3 7368504
# 4 1949790
# 5 3475174
# 6 6062879
ncol(trSamp)
# [1] 1
class(trSamp)
# [1] "data.frame"
class(trSamp[1])
# [1] "data.frame"
class(trSamp[,1])
# [1] "numeric"
colnames(trSamp)[2] <- "newname2"
# Error in names(x) <- value :
# 'names' attribute [2] must be the same length as the vector [1]
13 answers
colnames(trSamp)[2] <- "newname2"
Próbuje ustawić nazwę drugiej kolumny. Twój obiekt ma tylko jedną kolumnę, więc polecenie wyświetla błąd. Powinno to wystarczyć:
colnames(trSamp) <- "newname2"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-23 17:01:46
Jest to uogólniony sposób, w którym nie musisz pamiętać dokładnego położenia zmiennej:
# df = dataframe
# old.var.name = The name you don't like anymore
# new.var.name = The name you want to get
names(df)[names(df) == 'old.var.name'] <- 'new.var.name'
Ten kod w zasadzie działa następująco:
-
names(df)
sprawdza wszystkie nazwy wdf
-
[names(df) == old.var.name]
wypisuje nazwę zmiennej, którą chcesz sprawdzić -
<- 'new.var.name'
przypisuje nową nazwę zmiennej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-28 23:27:05
colnames(df)[colnames(df) == 'oldName'] <- 'newName'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-05 14:53:01
To stare pytanie, ale warto zauważyć, że można teraz używać setnames
z pakietu data.table
.
library(data.table)
setnames(DF, "oldName", "newName")
# or since the data.frame in question is just one column:
setnames(DF, "newName")
# And for reference's sake, in general (more than once column)
nms <- c("col1.name", "col2.name", etc...)
setnames(DF, nms)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-03 21:19:24
Można to również zrobić za pomocą pakietu Hadley ' a plyr
i funkcji rename
.
library(plyr)
df <- data.frame(foo=rnorm(1000))
df <- rename(df,c('foo'='samples'))
Możesz zmienić nazwę po nazwie (bez znajomości pozycji) i wykonać wiele zmian jednocześnie. Na przykład po wykonaniu połączenia możesz skończyć jako:
letterid id.x id.y
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
Którą możesz zmienić w jednym kroku używając:
letters <- rename(letters,c("id.x" = "source", "id.y" = "target"))
letterid source target
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-26 16:02:49
Myślę, że najlepszym sposobem zmiany nazw kolumn jest użycie pakietu dplyr w następujący sposób:
require(dplyr)
df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...)
Działa to samo przy zmianie nazwy jednej lub wielu kolumn w dowolnym zbiorze danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-23 22:24:56
Podoba mi się następny styl zmiany nazw kolumn dataframe jeden po drugim.
colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname'
Gdzie
which(colnames(df) == 'old_colname')
Zwraca indeks konkretnej kolumny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-08 07:50:01
Uważam, że najwygodniejszym sposobem zmiany nazwy pojedynczej kolumny jest użycie dplyr::rename_at
:
library(dplyr)
cars %>% rename_at("speed",~"new") %>% head
cars %>% rename_at(vars(speed),~"new") %>% head
cars %>% rename_at(1,~"new") %>% head
# new dist
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
- działa dobrze w łańcuchach rur
- wygodne, gdy nazwy są przechowywane w zmiennych
- działa z nazwą lub indeksem kolumny
- jasne i kompaktowe
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-24 21:43:51
Try:
colnames(x)[2] <- 'newname2'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-23 16:10:10
Możesz również spróbować 'upData' z pakietu 'Hmisc'.
library(Hmisc)
trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-29 09:55:31
Możesz użyć rename.vars
w pakiecie gdata
.
library(gdata)
df <- rename.vars(df, from = "oldname", to = "newname")
Jest to szczególnie przydatne, gdy masz więcej niż jedną nazwę zmiennej do zmiany lub chcesz dodać lub wstępnie umieścić tekst do nazw zmiennych, wtedy możesz zrobić coś takiego:
df <- rename.vars(df, from = c("old1", "old2", "old3",
to = c("new1", "new2", "new3"))
Przykład dodawania tekstu do podzbioru nazw zmiennych zobacz: https://stackoverflow.com/a/28870000/180892
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:35
Jeśli wiesz, że Twój dataframe ma tylko jedną kolumnę, możesz użyć:
names(trSamp) <- "newname2"
To prawdopodobnie już istnieje, ale bawiłem się zmienianiem nazw pól podczas poszukiwania rozwiązania i próbowałem tego dla kaprysu. Zadziałało na moje cele.
Table1$FieldNewName <- Table1$FieldOldName
Table1$FieldOldName <- NULL
Edycja zaczyna się tutaj....
To też działa.df <- rename(df, c("oldColName" = "newColName"))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 21:19:45