2009-09-16 8 views
0

La fonction ci-dessous fonctionne parfaitement pour mon but. L'affichage est merveilleux. Maintenant, mon problème est que je dois être capable de le refaire, plusieurs fois, sur d'autres variables qui correspondent à d'autres modèles.Itérer un script R en fonction de questions de sondage séquentielles

Dans cet exemple, j'ai sortie des résultats pour « Q4A », je voudrais être en mesure de le faire pour des séquences de questions qui suivent des modèles comme: q4 < a - z> ou q < 4 - 10> < a - z>, automagiquement.

Existe-t-il un moyen d'itérer de telle sorte que la variable spécifiée (dans ce cas, q4a) change à chaque fois?

Voilà ma fonction:

require(reshape) # Using it for melt 
require(foreign) # Using it for read.spss 

d1 <- read.spss(...) ## Read in SPSS file 

attach(d1,warn.conflicts=F) ## Attach SPSS data 

q4a_08 <- d1[,grep("q4a_",colnames(d1))] ## Pull in everything matching q4a_X 
q4a_08 <- melt(q4a_08) ## restructure data for post-hoc 

detach(d1) 

q4aaov <- aov(formula=value~variable,data=q4a) ## anova 

Merci à l'avance!

+0

Pourriez-vous partager un échantillon de ce qui est en d1 afin que nous puissions mieux comprendre le problème? –

+0

d1 est une donnée d'enquête provenant d'un fichier SPSS. L'enquête a n = 485 répondants interrogés sur 24 questions qui sont toutes des réponses numériques. –

Répondre

4

Je ne sais pas si cela est ce que vous cherchez, mais de générer la liste des questions:

> gsub('^', 'q', gsub(' ', '', 
    apply(expand.grid(1:10,letters),1, 
      function(r) paste(r, sep='', collapse='') 
     ))) 
    [1] "q1a" "q2a" "q3a" "q4a" "q5a" "q6a" "q7a" "q8a" "q9a" "q10a" 
[11] "q1b" "q2b" "q3b" "q4b" "q5b" "q6b" "q7b" "q8b" "q9b" "q10b" 
[21] "q1c" "q2c" "q3c" "q4c" "q5c" "q6c" "q7c" "q8c" "q9c" "q10c" 
[31] "q1d" "q2d" "q3d" "q4d" "q5d" "q6d" "q7d" "q8d" "q9d" "q10d" 
[41] "q1e" "q2e" "q3e" "q4e" "q5e" "q6e" "q7e" "q8e" "q9e" "q10e" 
[51] "q1f" "q2f" "q3f" "q4f" "q5f" "q6f" "q7f" "q8f" "q9f" "q10f" 
[61] "q1g" "q2g" "q3g" "q4g" "q5g" "q6g" "q7g" "q8g" "q9g" "q10g" 
[71] "q1h" "q2h" "q3h" "q4h" "q5h" "q6h" "q7h" "q8h" "q9h" "q10h" 
[81] "q1i" "q2i" "q3i" "q4i" "q5i" "q6i" "q7i" "q8i" "q9i" "q10i" 
[91] "q1j" "q2j" "q3j" "q4j" "q5j" "q6j" "q7j" "q8j" "q9j" "q10j" 
... 

Et puis vous tournez votre partie intérieure de l'analyse en une fonction qui prend le préfixe question comme paramètre:

analyzeQuestion <- function (prefix) 
{ 
    q <- d1[,grep(prefix,colnames(d1))] ## Pull in everything matching q4a_X 
    q <- melt(q) ## restructure data for post-hoc 

    qaaov <- aov(formula=value~variable,data=q4a) ## anova 
    return (LTukey(q4aaov,which="",conf.level=0.95)) ## Tukey's post-hoc 
} 

maintenant - Je ne sais pas où votre variable « Q4A » vient (tel qu'il est utilisé dans le aov(..., data=q4a) - donc pas sûr ce qu'il faut faire à ce sujet peu, mais nous espérons que cela aide

..

Pour mettre les deux ensemble, vous pouvez utiliser sapply() pour appliquer la fonction analyzeQuestion à chacun des préfixes générés automatiquement.

+0

Je vais essayer celui-ci. –

3

Je recommanderais de fondre l'ensemble de données entier, puis de diviser variable en ses composants. Ensuite, vous pouvez plus facilement utiliser le sous-ensemble pour regarder (par exemple) juste la question quatre: subset(molten, q = 4).

+0

Je vais voir comment je pourrais faire ce travail aussi. –

+0

Il y a quelques exemples de ceci dans l'introduction pour remodeler: http://www.jstatsoft.org/v21/i12/paper – hadley

+0

Merci pour le lien au papier! –