【问题标题】:Manupilating a dataframe with a pipe使用管道操作数据框
【发布时间】:2020-04-21 10:28:22
【问题描述】:

我想使用%>% 运算符创建下面代码的管道版本。

main_details <- select(houses, PID, Lot.Area, Bldg.Type:Year.Built,
  Mo.Sold, Yr.Sold, SalePrice)
expensive_houses <- filter(main_details, SalePrice > 150000)
ages_added <- mutate(expensive_houses, OLD_HOUSE = Year.Built < 1960)

我尝试了以下方法:

main_details <- select(houses, PID, Lot.Area, Bldg.Type:Year.Built,
  Mo.Sold, Yr.Sold, SalePrice) %>%
expensive_houses <- filter(SalePrice > 150000) %>%
ages_added <- mutate(OLD_HOUSE = Year.Built < 1960)

但是,这确实给了我一个错误。有人可以解释一下我需要将 %>% 运算符放在我的代码中的哪个位置来制作管道版本吗?

【问题讨论】:

    标签: r dplyr pipe


    【解决方案1】:

    使用管道的主要好处是您不必创建此类中间对象。管道的左侧是右侧函数的第一个参数。所以你可以使用:

    library(dplyr)
    
    houses %>%
      select(PID, Lot.Area, Bldg.Type:Year.Built, Mo.Sold, Yr.Sold, SalePrice) %>%
      filter(SalePrice > 150000) %>%
      mutate(OLD_HOUSE = Year.Built < 1960)
    

    【讨论】:

    • 非常感谢!因此,我们从 select 中提取房屋,因为我们使用 %>% ?
    • @Melissa 是的。所以如果你看到?select,第一个参数是.data,它来自LHS,即houses,同样,?filter 的第一个参数是.data,它是LHS 的输出,即seelct 的输出。
    【解决方案2】:

    这是data.table的选项

    library(data.table)
    setDT(houses)[SalePrice > 15000, .(PID, Lot.Area, Bldg.Type, 
         Year.Built, Mo.Sold, Yr.Sold, SalePrice)][, OLD_HOUSE := Year.Built < 1960][]
    

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2017-11-30
      • 2013-03-04
      相关资源
      最近更新 更多