1

我试图弄清楚如何重复一组列名。有时我会有 1 组列来命名,有时我会有 4 组列来命名。例如:

1组列名:

 r    a  

2组列名:

r    a     r    a 

我试过使用这个 for 循环:

 for(cnt in 1:numSetCol){
    colnames(data[,cnt]) <- "r"
    colnames(data[,cnt+1]) <- "a"
    cnt <- cnt + 2 

}

我收到错误消息:尝试在小于二维的对象上设置 colnames。

关于如何做到这一点的任何帮助都会很棒。

谢谢!

4

2 回答 2

2

你应该认真对待@vaettchen 的观点;如果这样做,您将无法按列名访问变量。我建议您为每个名称添加一个数字,以更好地索引您的变量。这可以这样做:

> dframe   <- as.data.frame(matrix(rnorm(60), ncol=6))
> cletters <- rep(c("r","a"), times=3)
> cindexes <- rep(c(1,2,3),   each=2)
> cnames   <- paste(cletters, cindexes, sep="")
> cnames
[1] "r1" "a1" "r2" "a2" "r3" "a3"
> colnames(dframe) <- cnames
> colnames(dframe)
[1] "r1" "a1" "r2" "a2" "r3" "a3"

对于它的价值,你的for循环代码是有缺陷的。您将编写for循环的方式与编写循环的方式混合在一起while。每次脚本到达for循环顶部时,cnt都会重置并且您的cnt <- cnt + 2语句会被清除。考虑:

> numSetCol <- 6
> for(cnt in 1:numSetCol){
+   print(cnt)
+   cnt <- cnt + 2 
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6

然而,在这里使用循环并不是最好的策略。我建议您也遵循@Henrik 的建议并阅读 R 手册的介绍,以开始了解更多关于 R 的基础知识。

于 2013-08-18T17:54:31.977 回答
1
mydata<-mtcars
names(mydata)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

x<-rep(names(mydata),2)
> x
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb" "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"  
[21] "gear" "carb"
于 2013-08-18T13:35:30.663 回答