3 votes

Utilisation d'un vecteur pour indexer un data.frame en R

J'ai un data.frame qui contient un numéro d'identification et des réponses échelonnées provenant d'une enquête :

df(responses)

ID    X1    X2    X3    X4
A1    1     1     2     1
B2    0     1     3     0
C3    3     3     2     0

J'ai également un data.frame qui est utilisé comme clé :

df(key)

X    Y    Z
2    1    1
3    2    2
4    3    4

J'essaie d'écrire un script qui calculera une X , Y y Z pour chaque participant, où le X Le score est la somme des réponses aux questions énumérées dans la liste suivante X dans la clé.

Par exemple, le X score du participant A1 serait égal à la somme de X2 , X3 y X4 dans le A1 rangée (1+2+1 = 4) .

La sortie souhaitée est :

df(output)

ID    X    Y    Z
A1    4    4    3
B2    4    4    1
C3    5    8    6

Cependant, j'ai du mal à indexer le data.frame. responses en utilisant les valeurs dans key . Mon état actuel est le suivant :

#store scale names
scales <- c(colnames(key))
#loop over every participant
for (i in responses$ID){
    #create temporary data.frame with only participant "i"s responses
    data <- subset(responses, ID == i)
    #loop over each scale and store the relevant response numbers
    for (s in scales){
        relevantResponses <- scales[c(s)]
        #create a temporary storage for the total of each scale
        runningScore <- 0
        #index each response and add it to the total
        for (r in relevantResponses){
             runningScore <- runningScore + data[1,r]

Cependant, j'obtiens l'erreur suivante :

Error in `[.data.frame`(data, 1, r) : 
  undefined columns selected

Existe-t-il une meilleure façon d'effectuer l'indexation que les boucles imbriquées ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X