正则表达式 – 通过data.table(R)循环grepl()
发布时间:2020-12-14 06:31:06 所属栏目:百科 来源:网络整理
导读:我有一个数据集存储为data.table DT,如下所示: print(DT) category industry1: administration admin2: nurse practitioner truck3: trucking truck4: administration admin5: warehousing nurse6: warehousing admin7: trucking truck8: nurse practitione
我有一个数据集存储为data.table DT,如下所示:
print(DT) category industry 1: administration admin 2: nurse practitioner truck 3: trucking truck 4: administration admin 5: warehousing nurse 6: warehousing admin 7: trucking truck 8: nurse practitioner nurse 9: nurse practitioner truck 我想将表减少到只有行业匹配类别的行.我的一般方法是使用grepl()来匹配字符串’^ {{INDUSTRY}} [az] $’和DT $category的每一行,并插入每个对应的DT $行代替{{INDUSTRY}使用infuse()在正则表达式字符串中.我很难找到一个时髦的data.table解决方案,它可以正确地循环遍历表并进行行内比较,所以我使用for循环来完成工作: template <- "^{{IND}}[a-z ]+$" DT[,match := FALSE,] for (i in seq(1,length(DT$category))) { ind <- DT[i]$industry categ <- d.daily[i]$category if (grepl(infuse(IND=ind,template),categ)){ DT[i]$match <- TRUE } } DT<- DT[match==TRUE] print(DT) category industry 1: administration admin 2: trucking truck 3: administration admin 4: trucking truck 5: nurse practitioner nurse 但是,我确信这可以通过更好的方式完成.有关如何通过利用data.table包的功能实现此结果的任何建议?我的理解是,在这种情况下,使用包的方法可能比for循环更有效.
Data.table擅长分组操作;我认为这是有用的,假设你有很多行具有相同的行业:
DT[ DT[,.I[grep(industry,category)],by = industry]$V1 ] 这使用the current idiom for subsetting by group,thanks to @eddi . 注释.这可能有助于进一步: >如果您有许多行具有相同的行业类别组合,请尝试=.(行业,类别).>在grep的地方尝试别的东西(比如Ken和Richard的答案中的选项). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |