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]
 239
r
Author: Rich Scriven, 2011-09-23

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"
 249
Author: Joshua Ulrich,
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:

  1. names(df) sprawdza wszystkie nazwy w df
  2. [names(df) == old.var.name] wypisuje nazwę zmiennej, którą chcesz sprawdzić
  3. <- 'new.var.name' przypisuje nową nazwę zmiennej.
 428
Author: Side_0o_Effect,
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'
 69
Author: zongshiwujie,
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)
 60
Author: Ricardo Saporta,
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
 45
Author: alexplanation,
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.

 19
Author: Luis Vazquez,
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.

 10
Author: jshepherd,
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
 4
Author: Moody_Mudskipper,
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'
 3
Author: NPE,
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'))

 3
Author: ansek,
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

 3
Author: Jeromy Anglim,
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"

 2
Author: ,
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:06:59

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"))
 1
Author: Scottieie,
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