2016-07-15 15 views
0

ich substr bin mit den letzten drei Buchstaben aus der Stringliste abschneiden: postal_code0R: substr() ergibt sich anders in für Schleife und Vektor

postal_code0 
>[1] "n14BE" "n14BE" "n14BE" "n14BE" "n14BE" "N16DD" "N16DD" "N16DD" "N16DD" "N16DD" 
>[11] "N11TW" "N11TW" "N11TW" "N11TW" "N11TW" "n5"  "N160LU" "N2"  "N200AU" "N200AU" 
>[21] "london" "n15"  "N5"  ""  

> outcode <- substr(postal_code0, 1, nchar(postal_code0)-3) 
> outcode 
[1] "n1" "n1" "n1" "n1" "n1" "N1" "N1" "N1" "N1" "N1" "N1" "N1" "N1" "N1" "N1" 
[16] ""  "N16" ""  "N20" "N20" "lon" ""  ""  ""  

Es beseitigt einige Elemente vollständig, was würde ich gerne behalten, aber wenn ich for-Schleife für die gleiche Funktion verwende, gibt es das Ergebnis zurück, das ich möchte.

> outcode0 <- c() 
> for (i in 1: length(postal_code0)){ 
+ outcode0[i] <- substr(postal_code0[i], 1, nchar(postal_code0)-3) 
+ } 

> outcode0 
[1] "n1" "n1" "n1" "n1" "n1" "N1" "N1" "N1" "N1" "N1" "N1" "N1" "N1" "N1" "N1" "n5" "N1" "N2" "N2" "N2" "lo" 
[22] "n1" "N5" "" 

Was ist der Unterschied zwischen den beiden Funktionen? Und wie bekommt man die

ohne Verwendung von for-Schleife?

+3

Was Ausgang gewünschten ist? Möchten Sie die ersten zwei Zeichen jeder Zeichenfolge beibehalten? Wenn ja, versuche 'substr (postal_code0,1,2)'. – nicola

+0

(1) Ich könnte den Unterschied zwischen der vektorisierten Natur der Argumente von "substring" gegenüber denen von "substr" betrachten, (2) Es könnte einfacher sein, den Note-Abschnitt von "substr" zu lesen und in die Funktion zu schauen strtrim'. – joran

+0

Nun, das Ding ist: substr (c ("n5", "n5"), 1, nchar (postal_code0) -3) geben auch "n5", "n5" zurück. Wenn ich durch einen Variablennamenvektor ersetze, gibt es einfach nicht das gleiche Ergebnis zurück – Chumoon

Antwort

2

Nach dem letzten Kommentar Sie links sollte Folgendes tun:

len <- nchar(postal_code0) 
substring(postal_code0, 1, ifelse(len <= 3, len, len - 3)) 
+0

I bin nicht sicher, ob die Frage, wie sie gestellt wird, Sinn ergibt: Wie viele Zeichen sollte der Kopf einer vierstelligen Zeichenkette zurückgeben? 3? oder 1? – JWLM

+0

Da @Chumoon daran interessiert war, 3 Zeichen vom Ende zu entfernen, so wie ich es interpretierte ist das, wenn es weniger als 3 Zeichen hat, dann die gesamte Zeichenfolge zurückgegeben werden soll.Ich stimme zu, dass die Frage könnte etwas klarer gemacht werden. – thepule

+0

@thepule danke für die Antwort. Yeh, das war mir nicht bewusst substr() nehmen nur einen Wert in nchar() – Chumoon