在cbind数据之后重命名列名

时间:2012-06-19 18:20:09

标签: r rename

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会自动列名称为V1V2 ...... 我想通过

重命名列
colnames(merger)[,1] <- "Date"

但失败了。当我使用merger$V1时,

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

7 个答案:

答案 0 :(得分:57)

您还可以直接在cbind来电中为列命名,例如:

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

输出:

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

答案 1 :(得分:12)

尝试:

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

答案 2 :(得分:6)

您在问题中提供了以下示例:

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

问题是逗号:colnames()返回一个向量,而不是一个矩阵,所以解决方案是:

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

答案 3 :(得分:3)

如果仅将向量传递给cbind(),则会创建矩阵,而不是数据帧。阅读?data.frame

答案 4 :(得分:2)

如果你提供cbind一组参数,它们都是向量,你将得到的不是数据帧,而是矩阵,在这种情况下是一个全字符矩阵。它们有不同的功能。如果您的某些参数仍为数据帧,则可以获取数据帧,请尝试:

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

答案 5 :(得分:2)

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

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

请参阅this answersetColNames <- function (object = nm, nm) { colnames(object) <- nm object } 包中包含此功能。

答案 6 :(得分:0)

在添加之前,只需添加要在引号中使用的名称即可    矢量

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