使用本机管道 |> 在基本 R 中选择多列的方法?

dr_*_*nch 5 r dataframe dplyr

使用本机管道 |> 在基本 R 中选择数据帧的多列有哪些好方法?(即,没有 tidyverse/dplyr 来减少外部依赖性)。

如果我们有数据框

dtf <- data.frame(a = 1:3, b = 4:6, c = 7:9)
Run Code Online (Sandbox Code Playgroud)

然后我们可以选择列 b 和 c

> dtf[c("b", "c")]
  b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)

在 tidyverse 中使用本机管道执行此操作的一种优雅方法是

> dtf |> dplyr::select(b, c)
  b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)

我对原生管道的最佳基础 R 尝试是

> dtf |> subset(select = c("b", "c"))
  b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)

更简洁(但失败的尝试)是

> dtf |> `[`(c("b", "c"))
Error: function '[' not supported in RHS call of a pipe
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法可以做到我所缺少的?

注意:如果您只想要一个列并且可以放入向量中,那么getElement可以使用:

> dtf |> getElement("b")
[1] 4 5 6
Run Code Online (Sandbox Code Playgroud)

Rui*_*das 1

这是一种方法:

dtf |> (\(x) `[`(x, c("b", "c")))()
#  b c
#1 4 7
#2 5 8
#3 6 9
Run Code Online (Sandbox Code Playgroud)

您必须使用匿名函数\(x)并将其作为参数传递给[. 不要忘记以括号结束()