Присвоение colnames () конкретному столбцу фрейма данных - PullRequest
3 голосов
/ 21 сентября 2010

У меня вопрос по поводу функции colnames в базовом пакете

Допустим, у вас есть data.frame, как показано ниже:

df <- data.frame(variable = letters[1:100], value = rnorm(100))

Как и следовало ожидать, colnames(df[1]) возвращает:

colnames(df[1]) 
# [1] "variable"

Однако не представляется возможным присвоение при вызове определенного столбца

colnames(df[1]) <- c("test")
colnames(df[1])
# [1] "variable"

Почему это?

Ответы [ 3 ]

7 голосов
/ 21 сентября 2010

Потому что вы должны делать это:

> colnames(df)[1] <- "test"
> colnames(df)[1]
[1] "test"

Функция colnames возвращает символьный вектор, который можно изменить.

4 голосов
/ 21 сентября 2010

Причина, по которой ваша версия не выполняет то, что вы ожидаете, заключается в том, что df[1] создает временный фрейм данных в памяти, затем функция colnames изменяет имя столбца 1 в этом временном фрейме данных (не ваш исходный фрейм данных),но тогда с временным df больше ничего не делается, поэтому он молча отбрасывается.Ваш исходный фрейм данных никогда не затрагивался, поэтому в следующий раз, когда вы выполните colnames(df[1]), создается новый временный df, копируемый из вашего неизмененного оригинала, и возвращается имя.

Изменение порядка вызова colnames и подмножествделает то, что вы хотите, как показывают другие ответы.

3 голосов
/ 21 сентября 2010

Вызовите функцию colnames () на фрейме данных (весь фрейм данных) , а затем получите доступ по индексу, элементы вектора 1D, возвращенные этим вызовом функции:

> data(Orange)    
> Orange[1:5,]
  Tree  age circumference
1    1  118            30
2    1  484            58
3    1  664            87
4    1 1004           115
5    1 1231           120
> call *colnames* on the Orange dataframe and bind it to the variable *cn*
> cn = colnames(Orange)
> cn    
[1] "Tree"          "age"           "circumference"
> length(cn)
[1] 3
> class(cn)
 [1] "character"

> # access the items of this 1D character vector by index:
> cn[1]
[1] "Tree"
> cn[3]
[1] "circumference"
> # likewise modify any item the same way:
> cn[3] = '2*pi*r'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...