正则表达式 – 通过data.table(R)循环grepl()

前端之家收集整理的这篇文章主要介绍了正则表达式 – 通过data.table(R)循环grepl()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数据集存储为data.table DT,如下所示:
  1. print(DT)
  2. category industry
  3. 1: administration admin
  4. 2: nurse practitioner truck
  5. 3: trucking truck
  6. 4: administration admin
  7. 5: warehousing nurse
  8. 6: warehousing admin
  9. 7: trucking truck
  10. 8: nurse practitioner nurse
  11. 9: nurse practitioner truck

我想将表减少到只有行业匹配类别的行.我的一般方法是使用grepl()来匹配字符串’^ {{INDUSTRY}} [az] $’和DT $category的每一行,并插入每个对应的DT $行代替{{INDUSTRY}使用infuse()在正则表达式字符串中.我很难找到一个时髦的data.table解决方案,它可以正确地循环遍历表并进行行内比较,所以我使用for循环来完成工作:

  1. template <- "^{{IND}}[a-z ]+$"
  2. DT[,match := FALSE,]
  3. for (i in seq(1,length(DT$category))) {
  4. ind <- DT[i]$industry
  5. categ <- d.daily[i]$category
  6. if (grepl(infuse(IND=ind,template),categ)){
  7. DT[i]$match <- TRUE
  8. }
  9. }
  10. DT<- DT[match==TRUE]
  11. print(DT)
  12. category industry
  13. 1: administration admin
  14. 2: trucking truck
  15. 3: administration admin
  16. 4: trucking truck
  17. 5: nurse practitioner nurse

但是,我确信这可以通过更好的方式完成.有关如何通过利用data.table包的功能实现此结果的任何建议?我的理解是,在这种情况下,使用包的方法可能比for循环更有效.

Data.table擅长分组操作;我认为这是有用的,假设你有很多行具有相同的行业:
  1. DT[ DT[,.I[grep(industry,category)],by = industry]$V1 ]

这使用the current idiom for subsetting by group,thanks to @eddi .

注释.这可能有助于进一步:

>如果您有许多行具有相同的行业类别组合,请尝试=.(行业,类别).>在grep的地方尝试别的东西(比如Ken和Richard的答案中的选项).

猜你在找的正则表达式相关文章