如何在R中过滤管道中的行后使用Max和Min

v9tzhpje  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(109)
我想了解max和min之间的权重差距,使用管道选项而不是分配变量。
weightLogInfo_merged %>%
+ filter (Id == 6962181067 ) %>%
+ pull(WeightKg) %>% 
+ max(WeightKg) - min(WeightKg)

我得到的错误:weightLogInfo_merged %〉% filter(Id == 6962181067)%〉% pull(WeightKg)%〉%出错:对象'WeightKg'未找到

gcuhipw9

gcuhipw91#

问题是WeightKg是数据集的一列。使用pull将从数据集中提取该列作为向量,但不会在环境中创建具有此名称的变量。而是将pull艾德向量直接传递到要应用的函数中。然而,当你想应用两个函数并计算差值时,你必须用花括号括起来,并使用.来指定最后一步的结果应该输送到哪里。
使用基于mtcars的最小可重现示例。

library(dplyr, warn = FALSE)

mtcars %>% 
  filter(cyl == 4) %>% 
  pull(mpg) %>%
  { max(.) - min(.) }
#> [1] 12.5

第二种实现相同结果的方法是使用range()diff()

mtcars %>% 
  filter(cyl == 4) %>% 
  pull(mpg) %>%
  range() %>% 
  diff()
#> [1] 12.5
kknvjkwl

kknvjkwl2#

其他选项包括with

library(dplyr)
mtcars %>% 
  filter(cyl ==4) %>%
  with(., max(mpg) - min(mpg))
[1] 12.5

或者在summarise/reframe中创建输出

mtcars %>% 
  filter(cyl ==4) %>%
  summarise(diff = max(mpg) - min(mpg)) %>%
  pull(diff)
[1] 12.5

或者使用magrittr%$%运算符

library(magrittr)
mtcars %>%
  filter(cyl ==4) %$% 
 (max(mpg) - min(mpg))
[1] 12.5

相关问题