Sno*_*ake 3 regex r data.table
基于这个问题:在data.table列中拆分文本字符串,我想知道是否有一种有效的方法可以根据行的内容有条件地拆分文本字符串.
假设我有下表:
Comments Eaten
001 Testing my computer No
0026 Testing my fridge No
Testing my car Yes
Run Code Online (Sandbox Code Playgroud)
我会这样:
ID Comments Eaten
001 Testing my computer No
0026 Testing my fridge No
NA Testing my car Yes
Run Code Online (Sandbox Code Playgroud)
NA是空的.
这在data.table中是否可行?
注释应该有一个ID,但由于这是可选的,我只想提取ID,当且仅当注释以数字开头时.
这可以使用允许您指定正则表达式模式tidyr的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
Run Code Online (Sandbox Code Playgroud)
convert = TRUE如果希望将提取的列转换为更合理的类型,则可以添加参数.
另一个只使用base R和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
]
Run Code Online (Sandbox Code Playgroud)
虽然在这种情况下,tidyr语法似乎对我来说更容易一些.也许有一种方法使用data.table的tstrsplit功能,带有花哨的外观正则表达式.