2016-05-02 10 views
1

私はRプログラミングには新しく、何時間もSOを検索しました。私はあなたの助けに感謝します。最後の2文字をdata.frameの列から抽出します。

私は3列のデータフレーム、(日付、説明、デビット)私は2番目(説明)列の最後の2つの文字を抽出しようとしています

 Date   Description Debit 
2014-01-01  "abcdef VA"  15 
2014-01-01  "ghijkl" NY"  56 

(つまり、2文字の州の略称)を持っています。私は適用型関数にはあまり慣れていません。

私は同じエラーで、

l <- lapply(a$Description, function(x) {substr(x, nchar(x)-2+1, nchar(x))}) 

使用してみましたが、私は、複数の他のアプローチを試してみましたが、次のエラーメッセージ

Error in nchar(x) : invalid multibyte string, element 1 

を取得しています。

私はここでブランドンSのサンプルデータを使用して、正規表現のバージョンだ、私は非常に基本的な何かが欠けていていることはかなり確信していますので、あなたの助け

おかげ

+0

'のSUBSTR(DFの$説明、NCHAR(DFの$説明)-1、nchar型(DFの$説明))を使用することができます' – HubertL

+0

をご提案ありがとうございました。私はあなたの提案は動作していることに気付きましたが、stmtに値を割り当てた場合に限ります。私は関数からdfを持っているときにはうまくいかないようです。これについて何か考えていますか?ありがとう – user6283308

答えて

3
library(stringr) 
str_sub(a$Description,-2,-1) 
0
df <- data.frame(date = c("2015-01-01", "2015-02-01", "2015-01-15"), 
      jumble = c("12345 VA", "123 FL", "12354567732 GA"), 
      debit = c(15, 36, 20)) 

df$jumble <- as.character(df$jumble) 

df$state <- substr(df$jumble, nchar(df$jumble)-1, nchar(df$jumble)) 

df 
     date   jumble debit state 
1 2015-01-01  12345 VA 15 VA 
2 2015-02-01   123 FL 36 FL 
3 2015-01-15 12354567732 GA 20 GA 
0

をいただければ幸いです。正規表現は、最後の空白文字の後ろのすべてを文字列の最後までキャプチャします。

df <- data.frame(date = c("2015-01-01", "2015-02-01", "2015-01-15"), 
       jumble = c("12345 VA", "123 FL", "12354567732 GA"), 
       debit = c(15, 36, 20)) 

df$state <- gsub(".+\\s(.+)$", "\\1", df$jumble) 

df 

     date   jumble debit state 
1 2015-01-01  12345 VA 15 VA 
2 2015-02-01   123 FL 36 FL 
3 2015-01-15 12354567732 GA 20 GA 
0

我々はsub

df$State <- sub(".*\\s+", "", df[,2]) 
df$State 
#[1] "VA" "FL" "GA" 
関連する問題