2016-07-15 7 views
0

のために私は、文字列のリストから最後の3つの文字を遮断するために、SUBSTRを使用しています:postal_code0R:SUBSTR()の結果は、異なるループとベクトル

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

2つの機能の違いは何ですか?と入手方法

outcode0 

forループを使用しないで?

+3

ご希望の出力は何ですか?各文字列の最初の2文字を保持しますか?もしそうなら、 '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

関連する問題