我正在使用dplyr对数据帧应用多个过滤器并选择操作。是否可以直接更改输入对象中的数据?
所以我想实现以下目标:
library(dplyr)
mtcars %>%
filter(mpg>20) %>%
select(cyl) <- mtcars %>%
filter(mpg>20) %>%
transmute(cyl=8)
显然,这会导致错误。
在基数R中,它看起来像这样:
mtcars[which(mtcars$mpg>20),"cyl"] <- 8
mtcars
答案 0 :(得分:2)
一种方法是:
Digit_by_place( 17489, 1) = 9
Digit_by_place( 17489, 2) = 8
Digit_by_place( 17489, 3) = 4
Digit_by_place( 17489, 4) = 7
Digit_by_place( 17489, 5) = 1
Digit_by_place( 17489, 6) = -1
Digit_by_place(-17489, 1) = 9
Digit_by_place(-17489, 6) = -1
Digit_by_place( 17489, 0) = -1
Digit_by_place( 17489, -1) = -1
Digit_by_place(-17489, -1) = -1
Digit_by_place( 17489, 5) = 1
Digit_by_place(-17489, 5) = 1
Digit_by_place( 0, 1) = 0
Digit_by_place( 0, 4) = -1
答案 1 :(得分:1)
除了mtcars %>%
mutate(cyl = ifelse(mpg > 20, 8, cyl))
,您不想传输。
您的示例可以这样写:
mutate
但是,其中存在缺陷,因为您仅选择mtcars2 <- mtcars %>%
filter(mpg>20) %>%
select(cyl) %>%
filter(mpg>20) %>%
mutate(cyl=8)
后才在mpg
上进行过滤。此外,您对相同条件进行了两次过滤,但是我认为这只是您“多重过滤和选择操作”的一种设想。
一个有效的例子是:
cyl