2016-07-15 47 views
0

我使用SUBSTR切斷從字符串列表中的最後三個字母:postal_code0R:SUBSTR()的結果在不同的for循環和矢量

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" ""  ""  ""  

它完全消除了一些元素,我想喜歡保持,但如果我使用循環的相同功能,它會返回我想要的結果。

> 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" "" 

這兩個函數有什麼區別?以及如何獲得

outcode0 

沒有使用for循環?

+3

什麼是你想要的輸出?你想保留每個字符串的前兩個字符嗎?如果是這樣,請嘗試'substr(postal_code0,1,2)'。 – nicola

+0

(1)我可能會考慮'substring'和'substr'的​​參數的向量化性質之間的差異,(2)讀'substr'的​​Note部分並查看函數' strtrim'。 – joran

+0

好,事情是:substr(c(「n5」,「n5」),1,nchar(postal_code0)-3)也返回「n5」,「n5」。當我用一個變量名稱向量替換時,它只是不會返回相同的結果 – Chumoon

回答

2

根據你最後留下的評論,下面應該做的:

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

I我不能確定所問的問題是否合理,一個四字符串的頭部應該返回多少個字符?3或1? – JWLM

+0

由於@Chumoon有興趣從末尾移除3個字符,所以我解釋它的方式如果它少於3個字符,那麼整個字符串將被返回。我同意這個問題可以更清楚一點。 – thepule

+0

@thepule謝謝你的答案。我沒有意識到substr()僅在nchar() – Chumoon