代码之家  ›  专栏  ›  技术社区  ›  Krisselack

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

  •  -1
  • Krisselack  · 技术社区  · 7 年前

    我正在使用dplyr对数据帧应用多个筛选和选择操作。是否可以直接更改输入对象中的数据?

    所以我想实现这样的目标:

    library(dplyr)
    mtcars %>%
    filter(mpg>20) %>%
    select(cyl) <- mtcars %>%
    filter(mpg>20) %>%
    transmute(cyl=8)
    

    显然,这会导致错误。

    在base R中,它将如下所示:

    mtcars[which(mtcars$mpg>20),"cyl"] <- 8
    mtcars
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   s_baldur    7 年前

    mtcars %>%
      mutate(cyl = ifelse(mpg > 20, 8, cyl))
    
        2
  •  1
  •   Dan Chaltiel    7 年前

    你不想改变,但是 mutate .

    您的示例可以这样编写:

    mtcars2 <-  mtcars %>%
       filter(mpg>20) %>%
       select(cyl) %>% 
       filter(mpg>20) %>% 
       mutate(cyl=8)
    

    然而,它也有缺陷,因为你正在过滤 mpg 仅在选择之后 cyl

    一个有效的例子是:

    mtcars2 <-  mtcars %>%
       filter(mpg>20) %>%
       mutate(cyl=8)