R 在cbind数据后重命名列名称

R 在cbind数据后重命名列名称,r,rename,R,Rename,但失败了。当我使用合并$V1时 colnames(merger)[,1] <- "Date" 尝试: colnames(merge)[1]如果只将向量传递给cbind()它将创建一个矩阵,而不是数据帧。读取?data.frame如果您提供cbind一组参数,所有参数都是向量,那么您将得到的不是数据帧,而是矩阵,在本例中是全字符矩阵。它们有不同的特点。如果某些参数仍然是数据帧,则可以获取数据帧,请尝试: a <- 1:10 b <- cbind(a, a, a) colname

但失败了。当我使用
合并$V1

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


colnames(merge)[1]如果只将向量传递给
cbind()
它将创建一个矩阵,而不是数据帧。读取
?data.frame

如果您提供
cbind
一组参数,所有参数都是向量,那么您将得到的不是数据帧,而是矩阵,在本例中是全字符矩阵。它们有不同的特点。如果某些参数仍然是数据帧,则可以获取数据帧,请尝试:

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")

合并您在问题中给出了以下示例:

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

colnames(merge)[,1]您也可以在
cbind
调用中直接命名列,例如

colnames(merger)[1]<-"Date"
输出:

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

生成
data.frame
并能够在一行中执行此操作的一种方法是,在使用
setNames
设置列名属性时,将传递到
cbind
的所有矩阵/数据帧强制为data.frame:

     date high
[1,]    0    2
[2,]    1    3
产生:

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')))
不幸的是,对于在列名之后返回矩阵的数据帧,没有类似于
setColNames
setColNames函数,但是,没有什么可以阻止您调整
setNames
的代码以生成一个:

          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在添加之前,只需在引号中添加要使用的名称即可
载体

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

a_matrix@jimsigner我试过了,然后说:“dimnames”[2]的长度不等于数组的长度你能提供一个可复制的小例子吗?我有同样的想法,但不知怎的,在我的例子中只使用了第一个列名,随后的列名被忽略了……试试
as.data.frame(cbind(date=c(0,1),high=c(2,3))
     date high
[1,]    0    2
[2,]    1    3
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 <- function (object = nm, nm) {
    colnames(object) <- nm
    object
}
a_matrix <- cbind(b_matrix,'Name-Change'= c_vector)