我想通过以下方式从 iris 数据集构造一个字符串向量: c("speciesvalue1 Sepal.lengthvalue1", "speciesvalue2 Sepal.lengthvalue2","speciesvalue3 Sepal.lengthvalue3"...etc.)
...此外,我只想包含 Sepal.Width 大于 3 的观察结果(即 Sepal.Width > 3)。
人们可能会认为使用管道这是一项简单的任务:
iris %>% filter(Sepal.Width > 3) %>% paste0(.$Species," ",.$Sepal.Length)
Run Code Online (Sandbox Code Playgroud)
然而,第二个管道理解这些点,但也认为它应该将整个数据帧传递给paste0作为其第一个参数,我得到这样的结果:
[1] "c(5.1, 4.7, 4.6, 5, 5.4, 4.6, 5, 4.9, 5.4, 4.8, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5, 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5, 5.5, 4.9, 5.1, 5, 4.4, 5, 5.1, 5.1, 4.6, 5.3, 5, 7, 6.4, 6.9, 6.3, 6.7, 5.9, 6, 6.7, 6.3, 7.2, 6.5, 6.4, 7.7, 6.9, 6.7, 7.2, 7.9, 6.3, 6.4, 6.9, 6.7, 6.9, 6.8, 6.7, 6.2)setosa 5.1"
[2] "c(3.5, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 3.1, 3.7, 3.4, 4, 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.6, 3.4, 3.5, 3.2, 3.5, 3.8, 3.8, 3.2, 3.7, 3.3, 3.2, 3.2, 3.1, 3.3, 3.1, 3.2, 3.4, 3.1, 3.3, 3.6, 3.2, 3.2, 3.8, 3.2, 3.3, 3.2, 3.8, 3.4, 3.1, 3.1, 3.1, 3.1, 3.2, 3.3, 3.4)setosa 4.7"
[3] "c(1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.5, 1.5, 1.6, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1, 1.7, 1.9, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3, 1.4, 1.5, 1.3, 1.3, 1.6, 1.9, 1.6, 1.4, 1.5, 1.4, 4.7, 4.5, 4.9, 4.7, 4.4, 4.8, 4.5, 4.7, 6, 6.1, 5.1, 5.3, 6.7, 5.7, 5.7, 6, 6.4, 5.6, 5.5, 5.4, 5.6, 5.1, 5.9, 5.7, 5.4)setosa 4.6"
[4] "c(0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.1, 0.2, 0.2, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.3, 0.2, 0.6, 0.4, 0.2, 0.2, 0.2, 0.2, 1.4, 1.5, 1.5, 1.6, 1.4, 1.8, 1.6, 1.5, 2.5, 2.5, 2, 2.3, 2.2, 2.3, 2.1, 1.8, 2, 2.4, 1.8, 2.1, 2.4, 2.3, 2.3, 2.5, 2.3)setosa 5"
...
Run Code Online (Sandbox Code Playgroud)
我怎样才能防止这种情况发生?
您可以将 括paste0在大括号中以避免数据帧作为第一个参数传递:
iris %>%
filter(Sepal.Width > 3) %>%
{paste0(.$Species," ",.$Sepal.Length)}
#> [1] "setosa 5.1" "setosa 4.7" "setosa 4.6" "setosa 5"
#> [5] "setosa 5.4" "setosa 4.6" "setosa 5" "setosa 4.9"
#> [9] "setosa 5.4" "setosa 4.8" "setosa 5.8" "setosa 5.7"
#> [13] "setosa 5.4" "setosa 5.1" "setosa 5.7" "setosa 5.1"
#> [17] "setosa 5.4" "setosa 5.1" "setosa 4.6" "setosa 5.1"
#> [21] "setosa 4.8" "setosa 5" "setosa 5.2" "setosa 5.2"
#> [25] "setosa 4.7" "setosa 4.8" "setosa 5.4" "setosa 5.2"
#> [29] "setosa 5.5" "setosa 4.9" "setosa 5" "setosa 5.5"
#> [33] "setosa 4.9" "setosa 5.1" "setosa 5" "setosa 4.4"
#> [37] "setosa 5" "setosa 5.1" "setosa 5.1" "setosa 4.6"
#> [41] "setosa 5.3" "setosa 5" "versicolor 7" "versicolor 6.4"
#> [45] "versicolor 6.9" "versicolor 6.3" "versicolor 6.7" "versicolor 5.9"
#> [49] "versicolor 6" "versicolor 6.7" "virginica 6.3" "virginica 7.2"
#> [53] "virginica 6.5" "virginica 6.4" "virginica 7.7" "virginica 6.9"
#> [57] "virginica 6.7" "virginica 7.2" "virginica 7.9" "virginica 6.3"
#> [61] "virginica 6.4" "virginica 6.9" "virginica 6.7" "virginica 6.9"
#> [65] "virginica 6.8" "virginica 6.7" "virginica 6.2"
Run Code Online (Sandbox Code Playgroud)
但我可能会使用它在管道末端的数据帧中创建所需的输出作为列 - 这是一种更“tidyverse”的做事mutate方式pluck
library(tidyverse)
iris %>%
filter(Sepal.Width > 3) %>%
mutate(output = paste0(Species," ", Sepal.Length)) %>%
pluck('output')
#> [1] "setosa 5.1" "setosa 4.7" "setosa 4.6" "setosa 5"
#> [5] "setosa 5.4" "setosa 4.6" "setosa 5" "setosa 4.9"
#> [9] "setosa 5.4" "setosa 4.8" "setosa 5.8" "setosa 5.7"
#> [13] "setosa 5.4" "setosa 5.1" "setosa 5.7" "setosa 5.1"
#> [17] "setosa 5.4" "setosa 5.1" "setosa 4.6" "setosa 5.1"
#> [21] "setosa 4.8" "setosa 5" "setosa 5.2" "setosa 5.2"
#> [25] "setosa 4.7" "setosa 4.8" "setosa 5.4" "setosa 5.2"
#> [29] "setosa 5.5" "setosa 4.9" "setosa 5" "setosa 5.5"
#> [33] "setosa 4.9" "setosa 5.1" "setosa 5" "setosa 4.4"
#> [37] "setosa 5" "setosa 5.1" "setosa 5.1" "setosa 4.6"
#> [41] "setosa 5.3" "setosa 5" "versicolor 7" "versicolor 6.4"
#> [45] "versicolor 6.9" "versicolor 6.3" "versicolor 6.7" "versicolor 5.9"
#> [49] "versicolor 6" "versicolor 6.7" "virginica 6.3" "virginica 7.2"
#> [53] "virginica 6.5" "virginica 6.4" "virginica 7.7" "virginica 6.9"
#> [57] "virginica 6.7" "virginica 7.2" "virginica 7.9" "virginica 6.3"
#> [61] "virginica 6.4" "virginica 6.9" "virginica 6.7" "virginica 6.9"
#> [65] "virginica 6.8" "virginica 6.7" "virginica 6.2"
Run Code Online (Sandbox Code Playgroud)
创建于 2023-03-10,使用reprex v2.0.2
如果您熟悉gluesintax
iris %>%
filter(Sepal.Width > 3) %>%
glue::glue_data("{Species} {Sepal.Length}")
Run Code Online (Sandbox Code Playgroud)
还有另一种选择是使用magrittr 博览会管道%$%:
library(dplyr, warn=FALSE)
library(magrittr)
iris %>%
filter(Sepal.Width > 3) %$%
paste(Species, Sepal.Length)
#> [1] "setosa 5.1" "setosa 4.7" "setosa 4.6" "setosa 5"
#> [5] "setosa 5.4" "setosa 4.6" "setosa 5" "setosa 4.9"
#> [9] "setosa 5.4" "setosa 4.8" "setosa 5.8" "setosa 5.7"
#> [13] "setosa 5.4" "setosa 5.1" "setosa 5.7" "setosa 5.1"
#> [17] "setosa 5.4" "setosa 5.1" "setosa 4.6" "setosa 5.1"
#> [21] "setosa 4.8" "setosa 5" "setosa 5.2" "setosa 5.2"
#> [25] "setosa 4.7" "setosa 4.8" "setosa 5.4" "setosa 5.2"
#> [29] "setosa 5.5" "setosa 4.9" "setosa 5" "setosa 5.5"
#> [33] "setosa 4.9" "setosa 5.1" "setosa 5" "setosa 4.4"
#> [37] "setosa 5" "setosa 5.1" "setosa 5.1" "setosa 4.6"
#> [41] "setosa 5.3" "setosa 5" "versicolor 7" "versicolor 6.4"
#> [45] "versicolor 6.9" "versicolor 6.3" "versicolor 6.7" "versicolor 5.9"
#> [49] "versicolor 6" "versicolor 6.7" "virginica 6.3" "virginica 7.2"
#> [53] "virginica 6.5" "virginica 6.4" "virginica 7.7" "virginica 6.9"
#> [57] "virginica 6.7" "virginica 7.2" "virginica 7.9" "virginica 6.3"
#> [61] "virginica 6.4" "virginica 6.9" "virginica 6.7" "virginica 6.9"
#> [65] "virginica 6.8" "virginica 6.7" "virginica 6.2"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |