Подтвердить что ты не робот

Переименовать имя столбца после cbind данных

enter image description here

merger <- cbind(as.character(Date),weather1$High,weather1$Low,weather1$Avg..High,weather1$Avg.Low,sale$Scanned.Movement[a])

После cbind данных новый DF будет иметь имена столбцов автоматически V1, V2...... Я хочу переименовать столбец

colnames(merger)[,1] <- "Date"

но не удалось. И когда я использую merger$V1,

Error in merger$V1 : $ operator is invalid for atomic vectors
4b9b3361

Ответ 1

Вы также можете назвать столбцы непосредственно в вызове cbind, например.

cbind(date=c(0,1), high=c(2,3))

Вывод:

     date high
[1,]    0    2
[2,]    1    3

Ответ 2

Try:

colnames(merger)[1] <- "Date"

Пример

Вот простой пример:

a <- 1:10
b <- cbind(a, a, a)
colnames(b)

# change the first one
colnames(b)[1] <- "abc"

# change all colnames
colnames(b) <- c("aa", "bb", "cc")

Ответ 3

в вашем вопросе вы приводили следующий пример:

colnames(merger)[,1]<-"Date"

проблема заключается в запятой: colnames() возвращает вектор, а не матрицу, поэтому решение:

colnames(merger)[1]<-"Date"

Ответ 4

Если вы передаете только векторы в cbind(), он создает матрицу, а не фреймворк данных. Прочтите ?data.frame.

Ответ 5

Если вы предлагаете cbind набор аргументов, все из которых являются векторами, вы получите не фреймворк данных, а скорее матрицу, в этом случае - всю матрицу символов. У них разные функции. Вы можете получить dataframe, если некоторые из ваших аргументов остаются dataframes, Try:

merger <- cbind(Date =as.character(Date),
             weather1[ , c("High", "Low", "Avg..High", "Avg.Low")] , 
             ScnMov =sale$Scanned.Movement[a] )

Ответ 6

Способ создания data.frame и возможность сделать это в одной строке заключается в принуждении всех матриц/кадров данных, переданных к cbind, в data.frame при установке атрибута имен столбцов с помощью setNames:

a = matrix(rnorm(10), ncol = 2)
b = matrix(runif(10), ncol = 2)

cbind(setNames(data.frame(a), c('n1', 'n2')), 
      setNames(data.frame(b), c('u1', 'u2')))

который производит:

          n1        n2         u1        u2
1 -0.2731750 0.5030773 0.01538194 0.3775269
2  0.5177542 0.6550924 0.04871646 0.4683186
3 -1.1419802 1.0896945 0.57212043 0.9317578
4  0.6965895 1.6973815 0.36124709 0.2882133
5  0.9062591 1.0625280 0.28034347 0.7517128

К сожалению, нет функции setColNames, аналогичной setNames для фреймов данных, которая возвращает матрицу после имен столбцов, однако вам нечего мешать вам адаптировать код setNames, чтобы произвести один:

setColNames <- function (object = nm, nm) {
    colnames(object) <- nm
    object
}

См. этот ответ, пакет magrittr содержит функции для этого.

Ответ 7

Просто добавьте имя, которое вы хотите использовать в кавычках, перед добавлением  вектор

a_matrix <- cbind(b_matrix,'Name-Change'= c_vector)