如何使用文本表达式对数据进行子集化

问题描述 投票:0回答:1

假设我读取了一些包含要在数据集中进行的操作的文件,作为示例

library(data.table)
dt = setDT(mtcars)
exp1 = "cyl == 8 & mpg > 16"
exp2 = "cyl == 6 & mpg < 20"

在这种情况下,

exp1
exp2
从文件中作为文本读取,有没有办法做这样的事情

dt[eval(exp1)]
dt[eval(exp2)]

使用文本表达式对数据进行子集化并进行其他数据转换?

编辑:

如果我做类似的事情

exp1 = quote(cyl == 8 & mpg > 16)
dt[eval(exp1)]

它有效,但是我如何让存储到文本中的数据使用这种引用方法呢?还有使用这个方法有什么问题吗?

r data.table
1个回答
0
投票

在不使用

eval

的情况下执行此操作
library(data.table)

dt <- as.data.table(mtcars)
exp1 = "cyl == 8 & mpg > 16"

do.call("[", list(dt, str2lang(exp1)))

给予

     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
1:  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2
2:  16.4     8 275.8   180  3.07 4.070 17.40     0     0     3     3
3:  17.3     8 275.8   180  3.07 3.730 17.60     0     0     3     3
4:  19.2     8 400.0   175  3.08 3.845 17.05     0     0     3     2
© www.soinside.com 2019 - 2024. All rights reserved.