Вы можете использовать функцию names<-
назначения
names(dat)[2] <- "value"
Вы можете также использовать setNames
, которая в основном то же самое, как names<-
, но измененные данные возвращается в качестве результата.
setNames(dat, c(names(dat)[1], "value"))
Update: Чтобы избежать некоторых копирования, сделанные names
, вы можете также использовать attr<-
attr(dat, "names")[2] <- "value"
И как уже упоминалось, Ананда в комментариях, ни по копированию, data.table
могут быть использованы
library(data.table)
setnames(dat, "X1041L", "value")
Вот взгляд на копирование:
> tracemem(dat)
# [1] "<0x23289b0>"
> names(dat)[2] <- "value"
# tracemem[0x23289b0 -> 0x26a1270]:
# tracemem[0x26a1270 -> 0x2244030]:
# tracemem[0x2244030 -> 0x26b9508]:
> tracemem(dat)
# [1] "<0x26b9508>"
> attr(dat, "names")[2] <- "value"
# tracemem[0x26b9508 -> 0x23dbd50]:
> library(data.table)
> tracemem(dat)
# [1] "<0x28c4408>"
> setnames(dat, "X1041L", "value")
Может показаться излишним, чтобы загрузить пакет для чего-то подобного, но «setnames» из «data.table» достигнет этого, не делая копии. Эксперимент с использованием 'tracemem (dat); имена (dat) [2] <- "value" 'по сравнению с' tracemem (dat); setnames (dat, "X1041L", "value") '. – A5C1D2H2I1M1N2O1R2T1
@AnandaMahto - точка взята, но я также мог бы использовать 'attr (dat," names ") [2] <-" значение "', чтобы избежать копирования из 'names'. Хотя DT все еще выигрывает. :-) –