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 ?