r - 如何从 dplyr 中的对象调用列名?

标签 r dataset

我正在尝试使用 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,但这没有帮助。

谁能告诉我如何让它工作?

最佳答案

如果您只想针对 numeric 列,那么可以尝试像 where() 这样的辅助函数,它将选择函数返回 TRUE< 的任何变量。我想这里唯一的好处是针对特定类型的变量。

library(dplyr)

# The where() function will select var2, var3, and var4
# Note: var1 is an integer so the function returns FALSE
# Useful when you want to completely ignore a specific type of variable

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)
  )

Data %>%
  mutate(across(where(is.numeric), ~na_if(., 0)))

这是输出:

   var1 var2 var3 var4
1     1   NA    2    7
2     2    4   NA   NA
3     3   NA    3    7
4     4    4    4   NA
5     5   NA    5    7
6     6    4    2   NA
7     7   NA   NA    7
8     8    4    3   NA
9     9   NA    4    7
10   10    4    5   NA

您会在此处找到的另一个答案很棒,它允许您选择任意数量的列。

关于r - 如何从 dplyr 中的对象调用列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67114415/

相关文章:

c# - 将 DataTable 从一个 DataSet 复制到另一个 DataSet

c# - 使用输出更新 (@MyTableVar),在 C# 中失败,在 SQL Server 中工作正常

mysql - 我应该如何将 DataTable 转换为分配给 DataGrid.ItemsSource?

excel - 如何建立一个矩阵相乘的简单优化模型?

r - 将 csv 或表变量写入文件

r - 提取多个时间序列的子集

r - R 中 GMM 包安装失败

csv - 如何创建 scikit learn 数据集?

python - 如何将随机森林分类器应用于所有数据集,在 python 中一次一小部分

r - 使用 dplyr 选择前 n 个组,然后绘制其他变量