Dit is een site voor studenten van de Open Universiteit. Voordat je een vraag kunt stellen moet je even een account aanmaken (dit systeem is niet gekoppeld aan je OU studentnummer en wachtwoord).

Welkom bij het vraag- en antwoord systeem van de onderzoeks-practica van de studie psychologie bij de Open Universiteit.

Houd er, als je een vraag stelt, rekening mee dat je de richtlijnen volgt!

hercoderen van character value naar numeric value in R

0 leuk 0 niet-leuks

Ik probeer een aantal likertschalen in R te hercoderen, van character naar numeric. De likertschalen zijn gemaakt in Limesurvey. De variabele scores zijn "A1", "A2", "A3", "A4", "A5", "A6" en "A7". De respectievelijke value labels zijn "<<<", "<<", "<", "|", ">", ">>", ">>>". De namen van de schalen zijn Intentions1, Intentions2 en Intentions3.

Ik weet dat ik de funtie  as.numeric()  moet gerbuiken, maar de juiste formulatie lukt me niet.

gevraagd 8 januari in Methodologie door Mark (240 punten)
Nog een vraagje. Kunnen deze handelingen ook rechtstreeks in het script geplaatst worden, net zoals dit gedaan kan worden bij SPSS in de syntax?

1 Antwoord

0 leuk 0 niet-leuks

De functie as.numeric leest een string als getal, maar alleen als die string ook alleen een getal bevat. Jouw strings bevatten een letter en een cijfer. Er zijn allerlei oplossingen (je kunt bijvoorbeeld recode gebruiken uit het car package), maar de makkelijkste is denk ik de volgende:

  • Kijk alleen naar het laatste karakter met substr ('substring')
  • Gebruik daar dan as.numeric op

Dit kan bijvoorbeeld zo:

dat\$intention_item1 <- as.numeric(substr(dat\$Intentions1, 2, 2);

Veiligheidshalve kun je eerst eventuele spaties voor of achter de answer code strippen met trim:

dat\$intention_item1 <- as.numeric(substr(trim(dat\$Intentions1), 2, 2);

Hiervoor moet je dan eerst package userfriendlyscience geladen hebben: daar zit die functie trim in.

Je kunt dit ook voor meerdere tegelijk doen:

varsToRecode <- c('Intentions1', 'Intentions2', 'Intentions3');
newVarNames <- paste0(varsToRecode, '_recoded');
dat[, newVarNames] <- lapply(dat[, varsToRecode], function(currentVar) {
  return(as.numeric(substr(trim(currentVar), 2, 2));
});

De functie lapply pakt een lijst met objecten (of een dataframe met kolommen) en geeft die objecten (of kolommen) dan een voor een door aan een functie. De resultaten worden dan weer teruggegeven.

beantwoord 9 januari door Gjalt-Jorn Peters (41,060 punten)
bewerkt 16 januari door Gjalt-Jorn Peters
problemen met substr
...