【发布时间】:2022-04-26 03:16:21
【问题描述】:
使用原生管道 |> 在 base R 中选择数据框的多列的好方法是什么? (即,没有 tidyverse/dplyr 来减少外部依赖)。
如果我们有数据框
dtf <- data.frame(a = 1:3, b = 4:6, c = 7:9)
然后我们可以选择列 b 和 c
> dtf[c("b", "c")]
b c
1 4 7
2 5 8
3 6 9
使用原生管道在 tidyverse 中执行此操作的一种优雅方式是
> dtf |> dplyr::select(b, c)
b c
1 4 7
2 5 8
3 6 9
我对原生管道的最佳基础 R 尝试是
> dtf |> subset(select = c("b", "c"))
b c
1 4 7
2 5 8
3 6 9
一个更简洁(但失败的尝试)是
> dtf |> `[`(c("b", "c"))
Error: function '[' not supported in RHS call of a pipe
有没有我想念的更好的方法来做到这一点?
注意:如果您只想要一列并且可以放入向量中,那么可以使用getElement:
> dtf |> getElement("b")
[1] 4 5 6
【问题讨论】:
-
比
subset的规范用法更优雅的东西吗?不,这是基本 R 中的最佳方法。(顺便说一句,您可以使用X <- `[`'; dtf |> X(c("b", "c"))作为基本 R 不希望您在这样的管道中使用`[`的解决方法。由 data.table#4872 中的评论建议。) -
看看这里stackoverflow.com/questions/67799890/…>