2017-10-19 80 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