我尝试使用dplyr
将多个列中的所有零替换为NA
。然而,由于我有许多变量,我不想一个一个地调用它们,而是将它们存储在一个对象中,以便以后调用。
这是我所做的一个最小的例子:
library(dplyr)
Data <- data.frame(var1 = c(1:10), var2 = rep(c(0, 4), 5), var3 = rep(c(2, 0, 3, 4, 5), 2), var4 = rep(c(7, 0), 5))
col <- Data[,c(2:4)]
Data <- Data %>%
mutate(across(col, na_if, 0))
但是,如果我这样做,我会得到以下错误消息:
Error: Problem with 'mutate()' input '..1'.
x Must subset columns with a valid subscript vector.
x Subscript has the wrong type 'data.frame<
var2: double
var3: double
var4: double>'.
i It must be numeric or character.
i Input '..1' is '(function (.cols = everything(), .fns = NULL, ..., .names = NULL) ...'.
我曾尝试将col
的格式更改为tibble,但没有帮助。
有谁能告诉我如何使这个工作吗?
2条答案
按热度按时间aurhwmvo1#
如果您只想针对 numeric 列,那么可以尝试像
where()
这样的辅助函数,它将选择函数返回TRUE
的任何变量。我想这里唯一的好处是针对特定类型的变量。下面是输出:
您将在这里找到的另一个答案很棒,它允许您选择任意数量的列。
3zwjbxry2#
这里,
col
应该是数据的名称。由于有一个函数名为col
,我们可以用不同的方式命名对象,用all_of
Package ,并将across
中的0替换为NA
。注意:这里OP询问了基于索引或列名的循环