Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择具有类似grep的部分匹配的data.table列_R_Data.table_Pattern Matching - Fatal编程技术网

选择具有类似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