我们如何使用字符串变量引用具有交互项的数据框列?

How do we refer to a dataframe column with an interaction term using a string variable?

我有一个数据框,其列包含在不同数据集上训练的回归模型的系数。数据框的每一行对应于在(可能)不同的数据集上训练的模型。在下面的示例中,我对三行中的每一行都使用了相同的数据集。有多个包含交互项的列。在下面的示例中,仅显示具有交互项的列。

> models_t
                    (Intercept)      x1       x2         x3    x1:x3
model1.coefficients  -0.0231804 1.02417 1.024191 -0.0118544 1.001139
model2.coefficients  -0.0231804 1.02417 1.024191 -0.0118544 1.001139
model3.coefficients  -0.0231804 1.02417 1.024191 -0.0118544 1.001139

我们正在使用这样的字符串过滤条件:

cond = "x1:x3 > 0"

为了筛选满足交互作用条件的模型。我们正在使用 dplyrrlang 库,如下所示:

> models_t %>% dplyr::filter(!!rlang::parse_expr(cond))
Error: Problem with `filter()` input `..1`.
ℹ Input `..1` is `x1:x3 > 0`.
x Input `..1` must be of size 3 or 1, not size 2.
Run `rlang::last_error()` to see where the error occurred.
In addition: Warning messages:
1: In x1:x3 : numerical expression has 3 elements: only the first used
2: In x1:x3 : numerical expression has 3 elements: only the first used

可以看出,R 似乎将 x1:x3 项解释为一个范围。如何使用字符串来引用交互项来执行这样的过滤操作?

对列名使用反引号。

cond = "`x1:x3` > 0"

然后您可以在基础 R subsetdplyr::filter -

中使用它
subset(df, eval(parse(text = cond)))

df %>% dplyr::filter(!!rlang::parse_expr(cond))