2013-08-18 3 views
1

Я пытаюсь выяснить, как повторить набор имен столбцов. Иногда у меня будет один набор столбцов для имени, а иногда я буду иметь 4 набора столбцов для имен. Например:Повторите имена кодов в R

1 набор имен столбцов:

r a 

2 набор имен столбцов:

r a  r a 

Я попытался использовать этот цикл:

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

} 

I получить ошибку: попытаться установить имена кодов на объект с менее чем двумя измерениями.

Любая помощь в том, как это сделать, будет замечательной.

Спасибо!

+2

'colnames (data) <- rep (c (" a "," r "), 2) '? – alexwhan

+4

Это не имеет смысла - вы больше не можете обращаться к именам столбцов по имени ('x $ r' только обращается к первому столбцу, называемому' r'). Но в любом случае попробуйте 'for (cnt в 1: (numSetCol-2)) {...}' – vaettchen

+1

Пожалуйста, найдите время, чтобы прочитать [Введение в R] (http://cran.r-project.org/doc /manuals/R-intro.pdf), первый документ [указан здесь] (http://stackoverflow.com/tags/r/info). – Henrik

ответ

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

Вы должны серьезно относиться к делу @ 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 

Однако использование петель - не самая лучшая стратегия здесь. Я рекомендую вам также следовать рекомендациям Хенрика и прочитать введение в руководство R, чтобы начать больше узнать об основах R.