2017-11-27 15 views
1

Ich habe eine Liste der Antworten auf 7 Fragen aus einer Umfrage, jede ihre eigene Spalte, und versuche, die Antwort innerhalb der ersten 6 zu finden, die am nächsten (numerisch) zum 7. ist. Einige werden nicht genau die gleichen sein, deshalb möchte ich eine neue Variable erstellen, die den Unterschied zwischen der nächsten Zahl in den ersten 6 und der 7. erzeugt. Das folgende Beispiel würde 0 ergeben.R Passende nächste Nummer aus den Spalten

s <- c(1,2,3,4,5,6,3) 
s <- t(s) 
s <- as.data.frame(s) 
s 

Jede Hilfe wird sehr geschätzt. Ich entschuldige mich dafür, dass ich keinen Code versucht habe, denn nichts, was ich versucht habe, ist tatsächlich nahe gekommen.

Antwort

2

Wie wäre es damit?

which.min(abs(s[1, 1:6] - s[1, 7])) 

Ich gehe davon aus, Sie wollen es irgendwie generalisiert, aber Sie müssten mehr Informationen dafür bereitstellen. Oder lass es einfach durch eine Schleife laufen :-)

EDIT: die Schleife aus dem Kommentar hinzugefügt und genau 2 winzige Dinge geändert.

s <- c(1,2,3,4,5,6,3) 
t <- c(1,2,3,4,5,6,7) 
p <- c(1,2,3,4,5,6,2) 
s <- data.frame(s,t,p) 
k <- t(s) 
k <- as.data.frame(k) 

k$t <- NA ### need to initialize the column 
for(i in 1:3){ 
    ## need to refer to each line of k when populating the t column 
    k[i,]$t <- which.min(abs(k[i, 1:6] - k[i, 7])) } 
+0

Vielen Dank, und Sie haben Recht, dass ich es verallgemeinerbar brauche. Mit einem Beispielcode habe ich diese Schleife ausprobiert und es werden nur die gleichen Ergebnisse für alle Zeilen erzeugt. s <- c (1,2,3,4,5,6,3) t <- c (1,2,3,4,5,6,7) p <- c (1,2, 3,4,5,6,2) s <- data.frame (s, t, p) k <- t (s) k <- as.data.frame (k) für (i in 1: 3) { k $ t <- which.min (abs (k [i, 1: 6] - k [i, 7])) } – dhrice

+0

Bearbeitete die Antwort, um die von Ihnen bereitgestellte Schleife einzuschließen :-) – user2602640