在dplyr中是否可以操纵输入数据集?

时间:2018-12-21 10:54:08

标签: r dplyr

我正在使用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

2 个答案:

答案 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