2016-12-08 1 views
-1

J'ai besoin de vérifier les résultats de test de 50 étudiants différents par rapport à une clé de réponse en mode multi-choix A, B, C, D.Comment puis-je comparer deux jeux de données élément par élément dans R?

J'ai une donnée à une dimension définie pour la clé de réponse, « réponses » que je lis dans comme answers <- read.table("A1_Ans_only.txt", header = FALSE, sep = ",")

View(answers)

Je l'ensemble de données « résultats » qui contient toutes les réponses pour tous 50 étudiants. Je l'ai lu en tant que results <- read.csv("Form A1_only.csv", header = FALSE)

View(results)

Alors, quand je tente quelque chose comme results==answers ou `évaluer (résultats, réponses) « avec l'évaluation étant une fonction que j'ai écrit défini comme » évaluer < - fonction (x, y) {x == y} 'J'obtiens toutes sortes d'erreurs comme "des trames de données de longueur non égale" ou pas des vecteurs de même niveau quand je les sous-ensembles pour être unidimensionnels. Est-ce que quelqu'un peut m'aider à évaluer chaque élément de la base de données des résultats pour décider quelles questions chaque étudiant a eu raison?

This is a small sample of results: 


structure(list(V1 = c(1L, 3L, 5L), V2 = c(NA, NA, NA), V3 = structure(c(2L, 
1L, 4L), .Label = c("A", "B", "C", "D"), class = "factor"), V4 =  structure(c(1L, 
1L, 1L), .Label = c("A", "B", "C", "D"), class = "factor"), V5 = structure(c(2L, 
2L, 3L), .Label = c("A", "B", "C", "D"), class = "factor"), V6 = structure(c(1L, 
1L, 1L), .Label = c("A", "B", "C"), class = "factor"), V7 = structure(c(1L, 
1L, 1L), .Label = c("A", "C", "D"), class = "factor"), V8 = structure(c(2L, 
1L, 2L), .Label = c("A", "B", "D"), class = "factor"), V9 = structure(c(1L, 
1L, 1L), .Label = c("A", "C", "D"), class = "factor"), V10 = structure(c(2L, 
2L, 1L), .Label = c("A", "B", "C"), class = "factor")), .Names = c("V1", 
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10"), row.names = c(NA, 
3L), class = "data.frame") 


This is the sample from answers: 

structure(list(V1 = structure(1L, .Label = "AAAAKEY", class = "factor"), 
V2 = NA, V3 = structure(1L, .Label = "C", class = "factor"), 
V4 = structure(1L, .Label = "A", class = "factor"), V5 = structure(1L, .Label = "C", class = "factor"), 
V6 = structure(1L, .Label = "A", class = "factor"), V7 = structure(1L, .Label = "A", class = "factor"), 
V8 = structure(1L, .Label = "B", class = "factor"), V9 = structure(1L, .Label = "A", class = "factor"), 
V10 = structure(1L, .Label = "B", class = "factor")), .Names = c("V1", 
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10"), class = "data.frame", row.names = c(NA, 
-1L)) 

Répondre

1

Nous pouvons faire une comparaison après la réplication des « réponses » pour que les longueurs égales

results==answers[col(results)] 
#  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 
#1 FALSE NA FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE 
#2 FALSE NA FALSE TRUE FALSE TRUE TRUE FALSE TRUE TRUE 
#3 FALSE NA FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE 

Le NA dans la colonne V2 pour les résultats "réponses de à la sortie NA comme une comparaison d'égalité avec NA résultats dans NA. Si nous avons besoin comme FAUX, puis remplacez le NA ensuite à FALSE ou faire un & avec !is.na(answers)[col(results)]

+0

Donc ce que je suis arrivé de c'était une impression très long avec toutes les observations retourné comme « FAUX » Qu'est-ce qui se passe exactement Là? –

+0

@ Mr.T Renvoie un vecteur. Quelle est exactement votre sortie attendue? Ici, chaque colonne de 'réponses' est répliquée de manière à obtenir le même nombre d'observations dans chaque colonne de 'résultats' et ensuite faire la comparaison entre les deux éléments – akrun

+0

J'espère avoir un moyen de montrer quelles réponses des étudiants sont "VRAI" ou "FAUX" mais cela montre que chaque entrée est "FAUX". Ce n'est pas exact. Comment puis-je contourner cela? –