我正在试图弄清楚如何重复一组列名。有时我会有一组列名称,有时我会有4组列名称。例如:
一组列名:
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。
任何有关如何做到这一点的帮助都会很棒。
谢谢!
答案 0 :(得分: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的基础知识。
答案 1 :(得分: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"