Ответ 1
Вы также можете назвать столбцы непосредственно в вызове cbind
, например.
cbind(date=c(0,1), high=c(2,3))
Вывод:
date high
[1,] 0 2
[2,] 1 3
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
Вы также можете назвать столбцы непосредственно в вызове cbind
, например.
cbind(date=c(0,1), high=c(2,3))
Вывод:
date high
[1,] 0 2
[2,] 1 3
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")
в вашем вопросе вы приводили следующий пример:
colnames(merger)[,1]<-"Date"
проблема заключается в запятой: colnames() возвращает вектор, а не матрицу, поэтому решение:
colnames(merger)[1]<-"Date"
Если вы передаете только векторы в cbind()
, он создает матрицу, а не фреймворк данных. Прочтите ?data.frame
.
Если вы предлагаете cbind
набор аргументов, все из которых являются векторами, вы получите не фреймворк данных, а скорее матрицу, в этом случае - всю матрицу символов. У них разные функции. Вы можете получить dataframe, если некоторые из ваших аргументов остаются dataframes, Try:
merger <- cbind(Date =as.character(Date),
weather1[ , c("High", "Low", "Avg..High", "Avg.Low")] ,
ScnMov =sale$Scanned.Movement[a] )
Способ создания 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
содержит функции для этого.
Просто добавьте имя, которое вы хотите использовать в кавычках, перед добавлением вектор
a_matrix <- cbind(b_matrix,'Name-Change'= c_vector)