Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用部分字符串的grep(带数字)在数据表中创建列_R_Regex_String_Data.table - Fatal编程技术网

使用部分字符串的grep(带数字)在数据表中创建列

使用部分字符串的grep(带数字)在数据表中创建列,r,regex,string,data.table,R,Regex,String,Data.table,如何使用grep查找部分字符串匹配,并仅将该字符串的一部分返回到现有数据表中的新列? 例如,我在dt中有一列$comments:“FC3” 有些评论说“废话废话,迟到57天废话” 有没有一句话我可以用来抓住“迟到57天”的部分,并把它放到一个新的专栏里?当然,它并不总是57天,有时是145天,有时只是8天——所以字符串的长度是动态的 每个请求:这里是示例/可复制数据(我认为这是您要求的) 在这里,包含字符串“2016年第1类延迟9天”的列以及相应行中的字符串“2013年第1类延迟57天提交”是我

如何使用grep查找部分字符串匹配,并仅将该字符串的一部分返回到现有数据表中的新列?
例如,我在dt中有一列$comments:“FC3”
有些评论说“废话废话,迟到57天废话”
有没有一句话我可以用来抓住“迟到57天”的部分,并把它放到一个新的专栏里?当然,它并不总是57天,有时是145天,有时只是8天——所以字符串的长度是动态的

每个请求:这里是示例/可复制数据(我认为这是您要求的)

在这里,包含字符串“2016年第1类延迟9天”的列以及相应行中的字符串“2013年第1类延迟57天提交”是我所指的字符串。对于我来说,能够搜索、抓取并将“晚9天”或“晚57天”字符串放入新列中的最佳过程是什么

包含我想要的字符串的列名是FC4$comments

谢谢你,我希望这能澄清

您可以使用
gsub()
和捕获表达式,如下所示:

dt <- data.table(remarks = c("blah blah blah 57 DAYS LATE blah blah",
                             "blah blah blah 145 DAYS LATE blah blah",
                             "2013 CAT 1 WAS 123 DAYS LATE SUBMIT",
                             "2016 CAT 1 WAS SUBMITTED 9 DAYS LATE"))

dt$new_column <- gsub(".* (\\d+ DAYS LATE).*", "\\1", dt$remarks)
# captures one or more consecutive digits and the string " DAYS LATE"

dt
                                  remarks    new_column
1:  blah blah blah 57 DAYS LATE blah blah  57 DAYS LATE
2: blah blah blah 145 DAYS LATE blah blah 145 DAYS LATE
3:    2013 CAT 1 WAS 123 DAYS LATE SUBMIT 123 DAYS LATE
4:   2016 CAT 1 WAS SUBMITTED 9 DAYS LATE   9 DAYS LATE

sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: macOS Sierra 10.12.1

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] data.table_1.9.6 magrittr_1.5     dplyr_0.5.0      purrr_0.2.2      readr_1.0.0      tidyr_0.6.1      tibble_1.2      
 [8] tidyverse_1.0.0  ggmap_2.7        ggplot2_2.2.1 

dt不是
grep
,但是还有其他正则表达式函数可以满足您的要求。请提供一个可复制的示例供人们查看和测试。感谢Imo-如果有帮助的话,我从实际的d.表中添加了一些行。有人给了我一个很好的起始代码,但是它留下了我不需要的部分字符串。另外,Frank,非常感谢您提供文档,这样我就可以像您一样整洁地复制表格结果。很抱歉我没有经验,但我会学习的!仅供参考,您可以@命名人员以ping他们。你的桌子仍然不容易被其他人复制,仅供参考。看看我为格式化所做的编辑:你可以选择代码并按CTRL+K或缩进四个空格来显示代码块。谢谢Nate,这让我开始了。然而,我唯一的问题是,在我的一些行中,有多个数字实例。(例如:2013年第1类提交延迟了57天)。您的代码将导致字符串的复制部分,如下所示“2013 CAT1延迟了57天”。我只对“迟到57天”甚至“迟到57天”部分感兴趣。然后,我计划去掉晚了几天的部分,对剩下的数字进行数学运算。非常感谢你!这个小小的修改可能有点接近最终结果:
gsub(“2016年第1类提交晚了9天”。“\\1”,“2016年第1类提交晚了9天”)
@Imo我试过了,但这只是用“2016年第1类提交晚了9天”取代了最后一列中的所有内容。如果可能的话,我只是想让它“晚9天”返回@嗯,我不确定是什么原因导致了你的问题,我测试了你的“特殊”场景,似乎对我很有效。
dt <- data.table(remarks = c("blah blah blah 57 DAYS LATE blah blah",
                             "blah blah blah 145 DAYS LATE blah blah",
                             "2013 CAT 1 WAS 123 DAYS LATE SUBMIT",
                             "2016 CAT 1 WAS SUBMITTED 9 DAYS LATE"))

dt$new_column <- gsub(".* (\\d+ DAYS LATE).*", "\\1", dt$remarks)
# captures one or more consecutive digits and the string " DAYS LATE"

dt
                                  remarks    new_column
1:  blah blah blah 57 DAYS LATE blah blah  57 DAYS LATE
2: blah blah blah 145 DAYS LATE blah blah 145 DAYS LATE
3:    2013 CAT 1 WAS 123 DAYS LATE SUBMIT 123 DAYS LATE
4:   2016 CAT 1 WAS SUBMITTED 9 DAYS LATE   9 DAYS LATE

sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: macOS Sierra 10.12.1

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] data.table_1.9.6 magrittr_1.5     dplyr_0.5.0      purrr_0.2.2      readr_1.0.0      tidyr_0.6.1      tibble_1.2      
 [8] tidyverse_1.0.0  ggmap_2.7        ggplot2_2.2.1