R中的data.table中的条件字符串拆分

时间:2017-05-03 12:55:14

标签: r regex data.table

基于这个问题:Split text string in a data.table columns,我想知道是否有一种有效的方法可以根据行的内容有条件地分割文本字符串。

假设我有下表:

Comments                  Eaten
001 Testing my computer   No
0026 Testing my fridge    No
Testing my car            Yes

我希望如此:

ID   Comments             Eaten
001  Testing my computer  No
0026 Testing my fridge    No
NA   Testing my car       Yes

NA为空。

这在data.table中是否可行?

评论应该有一个ID,但由于这是可选的,我只想提取ID,当且仅当评论以数字开头时。

1 个答案:

答案 0 :(得分:6)

这可以使用tidyr的{​​{1}}函数来完成,该函数允许您指定正则表达式模式:

extract

如果希望将提取的列转换为更合理的类型,可以添加参数tidyr::extract(dt, Comments, c("ID", "Comments"), regex = "^(\\d+)?\\s?(.*)$") # ID Comments Eaten #1: 001 Testing my computer No #2: 0026 Testing my fridge No #3: NA Testing my car Yes

仅使用base R和data.table的另一个选项是

convert = TRUE

虽然在这种情况下,tidyr语法似乎对我来说更容易一些。也许有一种方法可以使用data.table的dt[grepl("^\\d+", Comments), # check if start with ID (subset) `:=`(ID = sub("^(\\d+).*", "\\1",Comments), # extract ID from comments Comments = sub("^(\\d+)", "",Comments)) # delete ID from Comments ] 函数和一个奇特的外观正则表达式。