我有一个变量,其值的范围非常大。我想在数据框中创建一个新变量,该变量构成这些值的子集,所有原始值不在该子集的指定范围内,列为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的新手,所以我不确定自己做错了什么!
有人可以建议我如何获取所需数据吗?
非常感谢您!
答案 0 :(得分:3)
希望突变中的ifelse可以解决问题。
test <- mtcars %>%
mutate(mpg_subset = ifelse(mpg<=22 & mpg >=18, mpg, NA))
答案 1 :(得分:2)
尝试一下:
library(dplyr)
test <- mtcars %>%
mutate(mpg_subset = case_when(between(mpg,18,22) ~ mpg))
答案 2 :(得分:2)
我知道您指定了dplyr
,但是如果有人对data.table
解决方案感兴趣,它会使用ifelse
语句...
as.data.table(mtcars)[, mpg_subset := ifelse(mpg <= 22 & mpg >= 18, mpg, NA)]
您可能可以使用dplyr
做类似的事情。