【问题标题】:creating a new data frame by subsetting and manipulating an existing data frame in one step using dplyr使用 dplyr 通过对现有数据框进行子集化和操作来创建新数据框
【发布时间】:2014-11-26 16:09:22
【问题描述】:

所以我正在尝试学习如何使用 dplyr,但一些基本程序却让我望而却步。

例如,以下内容在基础上非常简单,但我不知道如何一步在 dplyr 中复制它。

 my_data <- with(mtcars, data.frame(   cylinders = cyl[cyl == 6], 
                                       twice_weight = wt[cyl == 6]*2))

我可以使用 mutate() 创建变量 two_weight,然后使用 select() 对结果进行子集化,但这似乎很麻烦。

谢谢!

【问题讨论】:

    标签: r subset dplyr


    【解决方案1】:

    也可以:

    filter(mtcars, cyl == 6) %>%
      transmute(cylinders = cyl, twice_weight = wt*2)
    
    #  cylinders twice_weight
    #1         6         5.24
    #2         6         5.75
    #3         6         6.43
    #4         6         6.92
    #5         6         6.88
    #6         6         6.88
    #7         6         5.54
    

    .. transmute 删除所有列,除了在其中显式调用的列和分组变量。

    【讨论】:

    • transmute 是我要找的东西
    • 欢迎您,@Michael。顺便说一句,如果您不介意列名略有不同,您也可以将转换更改为:transmute(cyl, twice_weight = wt*2)
    【解决方案2】:

    试试

    library(dplyr)
    mtcars %>% 
          filter(cyl==6) %>% 
          mutate(twice_weight=wt*2) %>% 
          select(cylinders=cyl, twice_weight)
    #   cylinders twice_weight
    #1         6         5.24
    #2         6         5.75
    #3         6         6.43
    #4         6         6.92
    #5         6         6.88
    #6         6         6.88
    #7         6         5.54
    

    【讨论】:

    • 好了!我想不会太麻烦。现在我只需要习惯那些“%>%”运算符!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2012-10-27
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多