以下示例使用“ [”。但是,我想知道是否存在使用%>%运算符来更改特定行的值的类似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
答案 0 :(得分:1)
您可以将以下代码与base
replace
和dplyr
if_else
函数一起使用。对于replace
,长度应相同。因此,我们还需要用逻辑表达式将字符向量子集化。
对于依赖于物种的乘法,我们需要使用if_else
,因为我们不是“停留在变量/列中”,而是需要其他列/变量(在本例中为“物种”)中的信息。
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
答案 1 :(得分:1)
我只会在if_else
中使用mutate
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创建
答案 2 :(得分:1)
这是一种使用magrittr::inset
而不是dplyr::mutate
和dplyr::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