我们如何使用字符串变量引用具有交互项的数据框列?
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"
为了筛选满足交互作用条件的模型。我们正在使用 dplyr
和 rlang
库,如下所示:
> 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 subset
或 dplyr::filter
-
中使用它
subset(df, eval(parse(text = cond)))
df %>% dplyr::filter(!!rlang::parse_expr(cond))
我有一个数据框,其列包含在不同数据集上训练的回归模型的系数。数据框的每一行对应于在(可能)不同的数据集上训练的模型。在下面的示例中,我对三行中的每一行都使用了相同的数据集。有多个包含交互项的列。在下面的示例中,仅显示具有交互项的列。
> 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"
为了筛选满足交互作用条件的模型。我们正在使用 dplyr
和 rlang
库,如下所示:
> 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 subset
或 dplyr::filter
-
subset(df, eval(parse(text = cond)))
df %>% dplyr::filter(!!rlang::parse_expr(cond))