2017-10-19 101 views
0

如何將這樣的列分隔開,其中數據具有分隔符但其餘部分不是並且它具有一些不相等的字符串?用不均勻/不等分的字符串和無分隔符分隔列

輸入: ID

142 TM500A2013PISA8/22/17BG
143 TM500CAGE2012QUDO8 /一千七百二十○分之二十二+

輸出:

類網站菜地一年種日期部分 142 TM 500 A 2013 PISA 8/22/17 BG 143 TM 500 CAGE 2012 QUDO 17年8月22日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

假設「網站」,「花園」和「物種」列具有固定寬度,下面的代碼可能適用於您。

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