【发布时间】:2022-01-11 06:46:14
【问题描述】:
我想使用mutate、across 和case_when 的组合在多个变量中将某些情况设置为NA(缺失)。
假设我有一个指示变量“vs”标记案例,对于变量“carb”和“gear”应该是 NA。我想使用这样的东西来将这些情况设置为同时丢失这两个变量:
data(mtcars) #load mtcars data
mtcars$carb <- as.integer(mtcars$carb) #set to integer,
#for purposes of illustration
mtcars <- mtcars %>%
mutate(across(c(gear:carb), ~ case_when(vs==1~NA,
T~.)))
对于“vs”等于1的所有情况,我希望将“gear”和“carb”更改为NA。但是,由于carb是整数而gear是数字,我遇到了一个类型冲突:
Error: Problem with `mutate()` input `..1`.
ℹ `..1 = across(c(gear:carb), ~case_when(vs == 1 ~ NA, T ~ .))`.
x must be a logical vector, not a double vector.
如果我在每个变量上单独使用mutate,我会将NA 替换为“carb”的NA_integer_,将NA 替换为“gear”的NA_real_。我不能在这里这样做,因为变量包含不同类型的数据。
有没有办法解决这个问题,或者我只能像这样使用mutate(across()) 和相同类型的变量?
谢谢!
【问题讨论】:
-
请提供样本数据,如果可以,请使用
dput(.)。请在给定示例输入的情况下包含您的预期输出。 -
我不确定如何使用 dput,但我添加了一个使用内置 mtcars 数据重现问题的示例——希望没问题。我添加了我的预期输出。谢谢!
-
如何使用
dput:输入dput(x)(或dput(head(x,10))或最小但足以满足您的问题需求的内容),复制包含前导structure(的输出,尾随/最后),以及介于两者之间的所有内容,然后将您的问题粘贴到代码块中。 (实际上非常简单。该函数的美妙之处在于它为我们提供了您正在使用的数据的完全明确的视图,而普通的控制台打印输出掩盖了factor、Date/POSIXct、list-columns、等等。当数据中有空格时,它也很有帮助。 -
但是...您对
mtcars的使用同样“简单”、有用,而且通常比向我们提供您的数据更好,只要问题可以充分在样本数据集中建模。谢谢! -
非常有帮助,谢谢!