2017-10-19 7 views
0

データに区切り文字が含まれていても残りの文字列がどのように区切られますか?列が不均一/不等な文字列と区切り文字なしで区切る

入力: ID

142 TM500A2013PISA8/22/17BG
143 TM500CAGE2012QUDO8/1720分の22 +

出力:

カテゴリサイト菜園年の種日部分 142 TM 500 A 2013 PISA 8/22/17 BG 143 TM 500 CAGE 2012 QUDO 8/22/17 20+

私は他の質問の周りつつい、それはつまり、同じ文字列であれば動作するかもしれ何かを試してみました:

>df <- avgmass %>% separate(id, c("site", "garden", "plot", "year", 
    "species", "sampledate", "portion"),sep=cumsum(c(2,3,3,4,4,5))) 

しかし、プロットIDはどちらかであるAなど、BまたはCAGE;日付は "/"です - 私はそれにどのように接近するか分かりません。

私はRに比較的新しいので、sep引数を使用する方法の詳細については検索してみましたが、役に立たなかった...助けてくれてありがとう。

+0

それは固定長でない場合、 '?extract' – akrun

+1

としてみてください、あなたは我々がそれらの文字と数字が何を意味するか見当がつかない期待出力 – akrun

+1

を示すことができました。フィールドを分割するルールは何ですか?なぜこのようなデータがフォーマットされているのですか? – MrFlick

答えて

0

"site"、 "garden"、 "species"の列の幅が固定されていると仮定すると、以下のコードが役に立ちます。

df <- df %>% 
     mutate(site = substr(id, 1, 2), 
      garden = substr(id, 3, 5), 
      plot = ifelse(substr(id, 6, 9) == "CAGE", substr(id, 6, 9), substr(id, 6, 6)), 
      year = ifelse(substr(id, 6, 9) == "CAGE", substr(id, 10, 13), substr(id, 7, 10)), 
      species = ifelse(substr(id, 6, 9) == "CAGE", substr(id, 14, 17), substr(id, 11, 14)), 
      sampledate = ifelse(substr(id, 6, 9) == "CAGE", substr(id, 18, nchar(id)), substr(id, 15, nchar(id)))) %>% 
      separate(sampledate, into = c("m","d","y"), sep = "/") %>% 
      mutate(portion = substr(y, 3, nchar(y)), 
        sampledate = as.Date(paste(m, d, substr(y, 1, 2), sep = "-"), format = "%m-%d-%y"), 
        m = NULL, 
        d = NULL, 
        y = NULL) 
+0

"id"カラムを自分で作成している場合は、フィールド間に区切り文字を入れ、後でカラムを分離する方が良いでしょう。 –

+0

ありがとう!私はこれを実行しようとし、それは日付の後に部分を入力する問題があったが、あなたのアドバイスを取って、私は私の列を結合し、別の機能を使用したときに区切りを追加しました。それは美しく働いた! – Andrew

関連する問題