2013-11-08 4 views
0

Я пытаюсь автоматизировать анализ некоторых таблиц данных в R.Как выбрать конкретные именованные столбцы

У меня есть таблицы, как так:

Theta1 Theta2 Theta3 Theta4 Sigma1 сигма2 Omega1 Omega2 Omega3 Omega4

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

Я думаю, что я близко, но вот мой код до сих пор:

mcmcChain <- as.matrix(MCMC) #switch MCMC object to matrix 
mcmcNames <- colnames(mcmcChain) #make vector with column names 

mcmcNames 
[1] "THETA1" "THETA2" "THETA3" "THETA4" "THETA5" "SIGMA.1.1" 
[7] "SIGMA.2.1" "SIGMA.2.2" "OMEGA.1.1" "OMEGA.2.1" "OMEGA.2.2" "OMEGA.3.1" 
[13] "OMEGA.3.2" "OMEGA.3.3" "OMEGA.4.1" "OMEGA.4.2" "OMEGA.4.3" "OMEGA.4.4" 
[19] "OMEGA.5.1" "OMEGA.5.2" "OMEGA.5.3" "OMEGA.5.4" "OMEGA.5.5" "MCMCOBJ" 

nVar <- length(mcmcNames) #number of variables 
for (i in 1:nVar) { 
    thetaNames <- mcmcNames[i] # !!some way to identify only theta's!! 
} 
nTheta <- length(thetaNames) #n theta variables 
thetaSamp <- NULL 
for (j in 1:nTheta) { #cbind all thetas to one column 
thetaSamp <- cbind(thetaSamp, 
       mcmcChain[,paste("THETA",j,sep="") ]) 
} 

Спасибо за любую помощь!

+1

Почему бы не использовать 'grep' определить соответствующие столбцы? – A5C1D2H2I1M1N2O1R2T1

ответ

1

Это изолирует все столбцы с «THETA» в имени и хранить их в своей собственной матрице называется «thetas»:

thetas <- mcmcChain[, c(grep("THETA", colnames(mcmcChain)))] 
+0

mcmcChain - это матрица, поэтому 'names (mcmcChain)' не работает – Metrics

+1

Спасибо. Это сработало хорошо: thetaSamp <- mcmcChain [, grep ("THETA", colnames (mcmcChain))] – KevinM

1
thetadata<-data.frame(mcmcChain[,grep("^THETA",colnames(mcmcChain))] 
Смежные вопросы