4

次のデータセット (列ベクトル) を想像してください。

df <- data.frame(a=c("AB3474","AB3482","AB3458","AB3487","AB3471","AB3452"))
df
       a
1 AB3474
2 AB3482
3 AB3458
4 AB3487
5 AB3471
6 AB3452

ここで、「a」が 5 番目の位置にある値を取得する新しいベクトルを作成したいと考えています。したがって、結果の df は次のようになります。

df_new
       a new
1 AB3474   7
2 AB3482   8
3 AB3458   5
4 AB3487   8
5 AB3471   7
6 AB3452   5

sapply分割された文字列に ( andを使用して) "sapplied" しましたstrsplitが、これを解決するためのより簡単で、できればより高速な方法があると思います。

助言がありますか?

4

2 に答える 2

6

これを使って:

df_new <- within(df, new <- substr(a, 5, 5))

結果:

       a new
1 AB3474   7
2 AB3482   8
3 AB3458   5
4 AB3487   8
5 AB3471   7
6 AB3452   5

編集:以下のコメントに答える:

within(df, new <- paste0(substr(a, 5, 5), ifelse(as.numeric(substr(a, 6, 6))>5, "b", "a")))

結果:

       a new
1 AB3474  7a
2 AB3482  8a
3 AB3458  5b
4 AB3487  8b
5 AB3471  7a
6 AB3452  5a

as.numeric字句比較を避けることが好ましいことに注意してください。

于 2013-08-12T12:55:39.663 に答える