我可以使用dplyr和<=和> =运算符创建一个新的数值变量来从现有向量中对值进行子集化吗?

问题描述 投票:1回答:3

我有一个具有非常大范围的值的变量。我想在我的数据框架中创建一个新变量,该变量构成这些值的子集,所有原始值都不在列为NA的子集的指定范围内。我试图用dplyr中的mutate来做这个,但是返回的变量是一个逻辑向量。

例如使用mtcars,我尝试过:

test <- mtcars %>% 
  mutate(mpg_subset = mpg<=22) %>% 
  mutate(mpg_subset=mpg_subset>=18)

在这里,我想要一个名为mpg_subset的新数值变量,它只包含mpg <= 22和> = 18的值,并且不在这些范围内的所有值都标记为NA。

不幸的是,我得到的是mpg_subset的逻辑向量,它告诉我mpg的原始值是否满足这些条件(TRUE或FALSE),而不是数字向量。我也试过使用过滤功能,但得到了相同的结果。我是dplyr的新手所以我不确定我做错了什么!

任何人都可以建议我如何获得我需要的数据?

非常感谢!

r dplyr
3个回答
2
投票

试试这个:

library(dplyr)
test <- mtcars %>% 
  mutate(mpg_subset = case_when(between(mpg,18,22) ~ mpg))

2
投票

我知道你指定dplyr,但如果有人对data.table解决方案感兴趣,这使用ifelse声明......

as.data.table(mtcars)[, mpg_subset := ifelse(mpg <= 22 & mpg >= 18, mpg, NA)]

你可以用dplyr做类似的事情。

© www.soinside.com 2019 - 2024. All rights reserved.