选择具有类似grep的部分匹配的data.table列
目前,当尝试不直接按名称而使用选择具有类似grep的部分匹配的data.table列,r,data.table,pattern-matching,R,Data.table,Pattern Matching,目前,当尝试不直接按名称而使用grepl选择列时,必须使用colnames()向grepl命令中的data.table添加额外的调用。是否可以将此功能直接实现到data.table中,以便直接使用grepl,并自动从当前data.table中获取列名 dt <- structure(list(Global.Company.Key = c(1380L, 1380L, 1380L, 1380L, 1380L) , Calendar.Data.Y
grepl
选择列时,必须使用colnames()
向grepl
命令中的data.table
添加额外的调用。是否可以将此功能直接实现到data.table中,以便直接使用grepl
,并自动从当前data.table中获取列名
dt <- structure(list(Global.Company.Key = c(1380L, 1380L, 1380L, 1380L, 1380L)
, Calendar.Data.Year.and.Quarter = structure(c(2000, 2000, 2000, 2000, 2000), class = "yearqtr")
, Current.Assets.Total = c(2218, 2218, 2218, 2218, 2218)
, DRILL_TYPE = c("U", "D", "V", "H", "U")
, DI.Oil.Prod.Quarter = c(18395.6792379842, 1301949.24041659, 235.311086392291, 27261.8049684835, 4719.27956989249)
, DI.Gas.Prod.Quarter = c(1600471.27107983, 4882347.22928982, 2611.60215053765, 9634.76418242493, 27648.276603634)), .Names = c("Global.Company.Key", "Calendar.Data.Year.and.Quarter", "Current.Assets.Total", "DRILL_TYPE", "DI.Oil.Prod.Quarter", "DI.Gas.Prod.Quarter"), row.names = c(NA, -5L), class = c("data.table", "data.frame"), sorted = c("Global.Company.Key", "Calendar.Data.Year.and.Quarter"))
如果能做到这一点,那就太好了:
dt[, grepl(glob2rx("Current.Assets*")), with = FALSE]
库(data.table)
dt您能指定什么是glob2rx
?glob2rx
只是我绕过regex的一种方式,因为它允许使用*作为通配符。当您要求新功能时,编程问题也是如此。FR已经发布了,顺便说一句:我没有找到它,对不起。我应该删除该问题还是将其作为功能请求的参考?由您决定。我认为这两种方式都很好。如果你想保留它作为参考,你可以在其中一个问题上发表评论,比如“如果实现了,请更新/回答这个帖子”。使我的代码更具可读性,尽管这不是最终的解决方案,可能是最好的解决方案。我想@DJJ是否可以提供一个简短的解释(关于mtcars的示例)mtcars\u dt[,.SD,.SDcols=grep(“m”,colnames(mtcars_dt),value=TRUE)]
需要用于data.table,而用于data.frame
以下工作mtcars[,grepl(“m”,colnames(mtcars))]
(但不用于data.table
)?这有助于其他人进一步了解data.table和data.frame之间的差异。我最近解决了相同的问题,您的答案是解决方案,但我仍然想知道它在data.table中是如何工作的,以及为什么必须采用基本方法。@gofraidh我建议在此基础上发布一个问题。有人比我更了解data.table。如果您还没有阅读它,那么它是一个很好的起点。对于data.table,解决方案如下。tmp现在,data.table还有patterns
键。aa
dt[, grepl(glob2rx("Current.Assets*")), with = FALSE]
## CurrentAssets FixedAssets CurrentLiabilities Capital
## 1: -1.27610992 -0.2989316 0.20688252 0.6504636
## 2: 0.01065576 1.3088539 1.22533006 0.7550024
## 3: 0.53308022 -1.3459419 -0.99627142 -0.7589336
## 4: 0.30737237 -0.4291044 2.20328357 0.2157515
## 5: -1.37391990 0.8581097 -0.08161687 0.7067757
## 6: 0.28664468 0.2308479 0.38675487 -0.3467660
## 7: -0.22902454 1.3365470 0.10128697 0.3246363
## 8: 0.05159736 -2.0702850 0.78404464 -1.7612696
## 9: 0.51817847 -0.8365225 -0.04778573 0.6170114
##10: 0.50859575 0.5683021 -0.13780167 -0.9243434