使用管道运算符处理 data/specific 行的子集(基于特定条件)

Working on a subset of data/specific rows (based on a certain condition) using the pipe operator

以下示例使用“[”。但是我想知道是否有更类似 tidyverse 的方法来使用 %>% 运算符更改特定行的值。

假设我想更改鸢尾花数据集,但不操作杂色物种所在的行。

library(dplyr)

data("iris")

iris$Species <- as.character(iris$Species)

iris[iris$Species!="versicolor",] <- iris[iris$Species!="versicolor",] %>% 

  mutate(

    Sepal.Length = Sepal.Length * 100,

    Species = paste0(Species, "_o0o0o0o0o0o0")

  )

distinct(iris, Species, .keep_all = TRUE)

期望的输出:

  Sepal.Length Sepal.Width Petal.Length Petal.Width                Species
1          510         3.5          1.4         0.2    setosa_o0o0o0o0o0o0
2            7         3.2          4.7         1.4             versicolor
3          630         3.3          6.0         2.5 virginica_o0o0o0o0o0o0

您可以将以下代码与 base replacedplyr if_else 函数一起使用。使用 replace 时,长度应该相同。因此,我们还需要使用逻辑表达式对字符向量进行子集化。

对于依赖于物种的乘法,我们需要使用if_else,因为我们不需要"stay within our variable/column",但需要来自其他columns/variables(在本例中为物种)的信息。

library(dplyr)
data("iris")

iris$Species <- as.character(iris$Species)

iris2 <- iris %>%
  mutate(Sepal.Length = if_else(Species != "versicolor", Sepal.Length * 100, Sepal.Length),
         Species = replace(Species, Species!="versicolor",  
                           paste0(Species[ Species!="versicolor"], "_o0o0o0o0o0o0") ))

这产生:

  Sepal.Length Sepal.Width Petal.Length Petal.Width                Species
1          510         3.5          1.4         0.2    setosa_o0o0o0o0o0o0
2            7         3.2          4.7         1.4             versicolor
3          630         3.3          6.0         2.5 virginica_o0o0o0o0o0o0

我只想在 mutate

中使用 if_else
library(dplyr)

data("iris")

iris1 <- iris %>% 
  mutate(Species = as.character(Species),
         Sepal.Length = if_else(Species != "versicolor", Sepal.Length * 100, Sepal.Length),
         Species2     = if_else(Species != "versicolor", paste0(Species, "_o0o0o0o0o0o0"), Species))

iris1  

#>     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#> 1          510.0         3.5          1.4         0.2     setosa
#> 2          490.0         3.0          1.4         0.2     setosa
#> 3          470.0         3.2          1.3         0.2     setosa
#> 4          460.0         3.1          1.5         0.2     setosa
#> 5          500.0         3.6          1.4         0.2     setosa
#> 6          540.0         3.9          1.7         0.4     setosa
#> 7          460.0         3.4          1.4         0.3     setosa
#> 8          500.0         3.4          1.5         0.2     setosa
#> 9          440.0         2.9          1.4         0.2     setosa
#> 10         490.0         3.1          1.5         0.1     setosa
#> 11         540.0         3.7          1.5         0.2     setosa
#> 12         480.0         3.4          1.6         0.2     setosa
#> 13         480.0         3.0          1.4         0.1     setosa
#> 14         430.0         3.0          1.1         0.1     setosa
#> 15         580.0         4.0          1.2         0.2     setosa
#> 16         570.0         4.4          1.5         0.4     setosa
#> 17         540.0         3.9          1.3         0.4     setosa
#> 18         510.0         3.5          1.4         0.3     setosa
#> 19         570.0         3.8          1.7         0.3     setosa
#> 20         510.0         3.8          1.5         0.3     setosa
#> 21         540.0         3.4          1.7         0.2     setosa
#> 22         510.0         3.7          1.5         0.4     setosa
#> 23         460.0         3.6          1.0         0.2     setosa
#> 24         510.0         3.3          1.7         0.5     setosa
#> 25         480.0         3.4          1.9         0.2     setosa
#> 26         500.0         3.0          1.6         0.2     setosa
#> 27         500.0         3.4          1.6         0.4     setosa
#> 28         520.0         3.5          1.5         0.2     setosa
#> 29         520.0         3.4          1.4         0.2     setosa
#> 30         470.0         3.2          1.6         0.2     setosa
#> 31         480.0         3.1          1.6         0.2     setosa
#> 32         540.0         3.4          1.5         0.4     setosa
#> 33         520.0         4.1          1.5         0.1     setosa
#> 34         550.0         4.2          1.4         0.2     setosa
#> 35         490.0         3.1          1.5         0.2     setosa
#> 36         500.0         3.2          1.2         0.2     setosa
#> 37         550.0         3.5          1.3         0.2     setosa
#> 38         490.0         3.6          1.4         0.1     setosa
#> 39         440.0         3.0          1.3         0.2     setosa
#> 40         510.0         3.4          1.5         0.2     setosa
#> 41         500.0         3.5          1.3         0.3     setosa
#> 42         450.0         2.3          1.3         0.3     setosa
#> 43         440.0         3.2          1.3         0.2     setosa
#> 44         500.0         3.5          1.6         0.6     setosa
#> 45         510.0         3.8          1.9         0.4     setosa
#> 46         480.0         3.0          1.4         0.3     setosa
#> 47         510.0         3.8          1.6         0.2     setosa
#> 48         460.0         3.2          1.4         0.2     setosa
#> 49         530.0         3.7          1.5         0.2     setosa
#> 50         500.0         3.3          1.4         0.2     setosa
#> 51           7.0         3.2          4.7         1.4 versicolor
#> 52           6.4         3.2          4.5         1.5 versicolor
#> 53           6.9         3.1          4.9         1.5 versicolor
#> 54           5.5         2.3          4.0         1.3 versicolor
#> 55           6.5         2.8          4.6         1.5 versicolor
#> 56           5.7         2.8          4.5         1.3 versicolor
#> 57           6.3         3.3          4.7         1.6 versicolor
#> 58           4.9         2.4          3.3         1.0 versicolor
#> 59           6.6         2.9          4.6         1.3 versicolor
#> 60           5.2         2.7          3.9         1.4 versicolor
#> 61           5.0         2.0          3.5         1.0 versicolor
#> 62           5.9         3.0          4.2         1.5 versicolor
#> 63           6.0         2.2          4.0         1.0 versicolor
#> 64           6.1         2.9          4.7         1.4 versicolor
#> 65           5.6         2.9          3.6         1.3 versicolor
#> 66           6.7         3.1          4.4         1.4 versicolor
#> 67           5.6         3.0          4.5         1.5 versicolor
#> 68           5.8         2.7          4.1         1.0 versicolor
#> 69           6.2         2.2          4.5         1.5 versicolor
#> 70           5.6         2.5          3.9         1.1 versicolor
#> 71           5.9         3.2          4.8         1.8 versicolor
#> 72           6.1         2.8          4.0         1.3 versicolor
#> 73           6.3         2.5          4.9         1.5 versicolor
#> 74           6.1         2.8          4.7         1.2 versicolor
#> 75           6.4         2.9          4.3         1.3 versicolor
#> 76           6.6         3.0          4.4         1.4 versicolor
#> 77           6.8         2.8          4.8         1.4 versicolor
#> 78           6.7         3.0          5.0         1.7 versicolor
#> 79           6.0         2.9          4.5         1.5 versicolor
#> 80           5.7         2.6          3.5         1.0 versicolor
#> 81           5.5         2.4          3.8         1.1 versicolor
#> 82           5.5         2.4          3.7         1.0 versicolor
#> 83           5.8         2.7          3.9         1.2 versicolor
#> 84           6.0         2.7          5.1         1.6 versicolor
#> 85           5.4         3.0          4.5         1.5 versicolor
#> 86           6.0         3.4          4.5         1.6 versicolor
#> 87           6.7         3.1          4.7         1.5 versicolor
#> 88           6.3         2.3          4.4         1.3 versicolor
#> 89           5.6         3.0          4.1         1.3 versicolor
#> 90           5.5         2.5          4.0         1.3 versicolor
#> 91           5.5         2.6          4.4         1.2 versicolor
#> 92           6.1         3.0          4.6         1.4 versicolor
#> 93           5.8         2.6          4.0         1.2 versicolor
#> 94           5.0         2.3          3.3         1.0 versicolor
#> 95           5.6         2.7          4.2         1.3 versicolor
#> 96           5.7         3.0          4.2         1.2 versicolor
#> 97           5.7         2.9          4.2         1.3 versicolor
#> 98           6.2         2.9          4.3         1.3 versicolor
#> 99           5.1         2.5          3.0         1.1 versicolor
#> 100          5.7         2.8          4.1         1.3 versicolor
#> 101        630.0         3.3          6.0         2.5  virginica
#> 102        580.0         2.7          5.1         1.9  virginica
#> 103        710.0         3.0          5.9         2.1  virginica
#> 104        630.0         2.9          5.6         1.8  virginica
#> 105        650.0         3.0          5.8         2.2  virginica
#> 106        760.0         3.0          6.6         2.1  virginica
#> 107        490.0         2.5          4.5         1.7  virginica
#> 108        730.0         2.9          6.3         1.8  virginica
#> 109        670.0         2.5          5.8         1.8  virginica
#> 110        720.0         3.6          6.1         2.5  virginica
#> 111        650.0         3.2          5.1         2.0  virginica
#> 112        640.0         2.7          5.3         1.9  virginica
#> 113        680.0         3.0          5.5         2.1  virginica
#> 114        570.0         2.5          5.0         2.0  virginica
#> 115        580.0         2.8          5.1         2.4  virginica
#> 116        640.0         3.2          5.3         2.3  virginica
#> 117        650.0         3.0          5.5         1.8  virginica
#> 118        770.0         3.8          6.7         2.2  virginica
#> 119        770.0         2.6          6.9         2.3  virginica
#> 120        600.0         2.2          5.0         1.5  virginica
#> 121        690.0         3.2          5.7         2.3  virginica
#> 122        560.0         2.8          4.9         2.0  virginica
#> 123        770.0         2.8          6.7         2.0  virginica
#> 124        630.0         2.7          4.9         1.8  virginica
#> 125        670.0         3.3          5.7         2.1  virginica
#> 126        720.0         3.2          6.0         1.8  virginica
#> 127        620.0         2.8          4.8         1.8  virginica
#> 128        610.0         3.0          4.9         1.8  virginica
#> 129        640.0         2.8          5.6         2.1  virginica
#> 130        720.0         3.0          5.8         1.6  virginica
#> 131        740.0         2.8          6.1         1.9  virginica
#> 132        790.0         3.8          6.4         2.0  virginica
#> 133        640.0         2.8          5.6         2.2  virginica
#> 134        630.0         2.8          5.1         1.5  virginica
#> 135        610.0         2.6          5.6         1.4  virginica
#> 136        770.0         3.0          6.1         2.3  virginica
#> 137        630.0         3.4          5.6         2.4  virginica
#> 138        640.0         3.1          5.5         1.8  virginica
#> 139        600.0         3.0          4.8         1.8  virginica
#> 140        690.0         3.1          5.4         2.1  virginica
#> 141        670.0         3.1          5.6         2.4  virginica
#> 142        690.0         3.1          5.1         2.3  virginica
#> 143        580.0         2.7          5.1         1.9  virginica
#> 144        680.0         3.2          5.9         2.3  virginica
#> 145        670.0         3.3          5.7         2.5  virginica
#> 146        670.0         3.0          5.2         2.3  virginica
#> 147        630.0         2.5          5.0         1.9  virginica
#> 148        650.0         3.0          5.2         2.0  virginica
#> 149        620.0         3.4          5.4         2.3  virginica
#> 150        590.0         3.0          5.1         1.8  virginica
#>                   Species2
#> 1      setosa_o0o0o0o0o0o0
#> 2      setosa_o0o0o0o0o0o0
#> 3      setosa_o0o0o0o0o0o0
#> 4      setosa_o0o0o0o0o0o0
#> 5      setosa_o0o0o0o0o0o0
#> 6      setosa_o0o0o0o0o0o0
#> 7      setosa_o0o0o0o0o0o0
#> 8      setosa_o0o0o0o0o0o0
#> 9      setosa_o0o0o0o0o0o0
#> 10     setosa_o0o0o0o0o0o0
#> 11     setosa_o0o0o0o0o0o0
#> 12     setosa_o0o0o0o0o0o0
#> 13     setosa_o0o0o0o0o0o0
#> 14     setosa_o0o0o0o0o0o0
#> 15     setosa_o0o0o0o0o0o0
#> 16     setosa_o0o0o0o0o0o0
#> 17     setosa_o0o0o0o0o0o0
#> 18     setosa_o0o0o0o0o0o0
#> 19     setosa_o0o0o0o0o0o0
#> 20     setosa_o0o0o0o0o0o0
#> 21     setosa_o0o0o0o0o0o0
#> 22     setosa_o0o0o0o0o0o0
#> 23     setosa_o0o0o0o0o0o0
#> 24     setosa_o0o0o0o0o0o0
#> 25     setosa_o0o0o0o0o0o0
#> 26     setosa_o0o0o0o0o0o0
#> 27     setosa_o0o0o0o0o0o0
#> 28     setosa_o0o0o0o0o0o0
#> 29     setosa_o0o0o0o0o0o0
#> 30     setosa_o0o0o0o0o0o0
#> 31     setosa_o0o0o0o0o0o0
#> 32     setosa_o0o0o0o0o0o0
#> 33     setosa_o0o0o0o0o0o0
#> 34     setosa_o0o0o0o0o0o0
#> 35     setosa_o0o0o0o0o0o0
#> 36     setosa_o0o0o0o0o0o0
#> 37     setosa_o0o0o0o0o0o0
#> 38     setosa_o0o0o0o0o0o0
#> 39     setosa_o0o0o0o0o0o0
#> 40     setosa_o0o0o0o0o0o0
#> 41     setosa_o0o0o0o0o0o0
#> 42     setosa_o0o0o0o0o0o0
#> 43     setosa_o0o0o0o0o0o0
#> 44     setosa_o0o0o0o0o0o0
#> 45     setosa_o0o0o0o0o0o0
#> 46     setosa_o0o0o0o0o0o0
#> 47     setosa_o0o0o0o0o0o0
#> 48     setosa_o0o0o0o0o0o0
#> 49     setosa_o0o0o0o0o0o0
#> 50     setosa_o0o0o0o0o0o0
#> 51              versicolor
#> 52              versicolor
#> 53              versicolor
#> 54              versicolor
#> 55              versicolor
#> 56              versicolor
#> 57              versicolor
#> 58              versicolor
#> 59              versicolor
#> 60              versicolor
#> 61              versicolor
#> 62              versicolor
#> 63              versicolor
#> 64              versicolor
#> 65              versicolor
#> 66              versicolor
#> 67              versicolor
#> 68              versicolor
#> 69              versicolor
#> 70              versicolor
#> 71              versicolor
#> 72              versicolor
#> 73              versicolor
#> 74              versicolor
#> 75              versicolor
#> 76              versicolor
#> 77              versicolor
#> 78              versicolor
#> 79              versicolor
#> 80              versicolor
#> 81              versicolor
#> 82              versicolor
#> 83              versicolor
#> 84              versicolor
#> 85              versicolor
#> 86              versicolor
#> 87              versicolor
#> 88              versicolor
#> 89              versicolor
#> 90              versicolor
#> 91              versicolor
#> 92              versicolor
#> 93              versicolor
#> 94              versicolor
#> 95              versicolor
#> 96              versicolor
#> 97              versicolor
#> 98              versicolor
#> 99              versicolor
#> 100             versicolor
#> 101 virginica_o0o0o0o0o0o0
#> 102 virginica_o0o0o0o0o0o0
#> 103 virginica_o0o0o0o0o0o0
#> 104 virginica_o0o0o0o0o0o0
#> 105 virginica_o0o0o0o0o0o0
#> 106 virginica_o0o0o0o0o0o0
#> 107 virginica_o0o0o0o0o0o0
#> 108 virginica_o0o0o0o0o0o0
#> 109 virginica_o0o0o0o0o0o0
#> 110 virginica_o0o0o0o0o0o0
#> 111 virginica_o0o0o0o0o0o0
#> 112 virginica_o0o0o0o0o0o0
#> 113 virginica_o0o0o0o0o0o0
#> 114 virginica_o0o0o0o0o0o0
#> 115 virginica_o0o0o0o0o0o0
#> 116 virginica_o0o0o0o0o0o0
#> 117 virginica_o0o0o0o0o0o0
#> 118 virginica_o0o0o0o0o0o0
#> 119 virginica_o0o0o0o0o0o0
#> 120 virginica_o0o0o0o0o0o0
#> 121 virginica_o0o0o0o0o0o0
#> 122 virginica_o0o0o0o0o0o0
#> 123 virginica_o0o0o0o0o0o0
#> 124 virginica_o0o0o0o0o0o0
#> 125 virginica_o0o0o0o0o0o0
#> 126 virginica_o0o0o0o0o0o0
#> 127 virginica_o0o0o0o0o0o0
#> 128 virginica_o0o0o0o0o0o0
#> 129 virginica_o0o0o0o0o0o0
#> 130 virginica_o0o0o0o0o0o0
#> 131 virginica_o0o0o0o0o0o0
#> 132 virginica_o0o0o0o0o0o0
#> 133 virginica_o0o0o0o0o0o0
#> 134 virginica_o0o0o0o0o0o0
#> 135 virginica_o0o0o0o0o0o0
#> 136 virginica_o0o0o0o0o0o0
#> 137 virginica_o0o0o0o0o0o0
#> 138 virginica_o0o0o0o0o0o0
#> 139 virginica_o0o0o0o0o0o0
#> 140 virginica_o0o0o0o0o0o0
#> 141 virginica_o0o0o0o0o0o0
#> 142 virginica_o0o0o0o0o0o0
#> 143 virginica_o0o0o0o0o0o0
#> 144 virginica_o0o0o0o0o0o0
#> 145 virginica_o0o0o0o0o0o0
#> 146 virginica_o0o0o0o0o0o0
#> 147 virginica_o0o0o0o0o0o0
#> 148 virginica_o0o0o0o0o0o0
#> 149 virginica_o0o0o0o0o0o0
#> 150 virginica_o0o0o0o0o0o0

reprex package (v0.2.1.9000)

创建于 2018-09-20

这里有一种使用 magrittr::inset 而不是 dplyr::mutatedplyr::if_else 的方法:

iris %>% mutate_at("Species",as.character) %>%
 inset(x <- .$Species!="versicolor", c("Sepal.Length", "Species"),
       value = cbind(.$Sepal.Length[x] * 100, paste0(.$Species[x], "_o0o0o0o0o0o0"))) %>%
 distinct(Species, .keep_all = TRUE)

#   Sepal.Length Sepal.Width Petal.Length Petal.Width                Species
# 1          510         3.5          1.4         0.2    setosa_o0o0o0o0o0o0
# 2            7         3.2          4.7         1.4             versicolor
# 3          630         3.3          6.0         2.5 virginica_o0o0o0o0o0o0