r - 在 R 中使用 for 循环在管道上迭代变量

标签 r loops variables

我有一个类似于以下简化数据集的数据集:

x_1 <- c(1, NA, 2, 3, NA, 4, 5)
x_2 <- c(2, 1, NA, NA, NA, 4, 6)
y_1 <- c(2, 4, 6, 8, NA, 10, NA)
y_2 <- c(NA, 4, NA, 8, 10, 11, 13)
df <- data.frame(x_1, x_2, y_1, y_2)

  x_1 x_2 y_1 y_2
1   1   2   2  NA
2  NA   1   4   4
3   2  NA   6  NA
4   3  NA   8   8
5  NA  NA  NA  10
6   4   4  10  11
7   5   6  NA  13

目标是合并两个相应变量(x 和 y),并用 NA 替换不相同的值(例如 x_1 和 x_2 的第一行)。我通过以下方式做到了这一点:

df <- df %>%
  mutate(x = coalesce(x_1, x_2)) %>%
  mutate(x = ifelse(!is.na(x) &
                    !is.na(x_2) &
                    x != x_2,
                    NA,
                    x)) %>%
 select(!c(x_1, x_2))

现在,我必须使用 21 个变量来执行此操作,因此我想将变量放入列表中,并使用如下 for 循环将它们通过管道提供:

cols <- c("x", "y")

for(i in cols){
  var_1 <- paste(i, "1", sep = "_")
  var_2 <- paste(i, "2", sep = "_")
  
  df <- df %>%
    mutate(i = coalesce(var_1, var_2)) %>%
    mutate(i = ifelse(!is.na(i) &
                      !is.na(var_2) &
                      i != var_2,
                      NA,
                      i)) %>%
    select(!c(var_1, var_2))
}

所发生的情况是代码被执行,但没有新变量,只有带有空值的变量“i”。似乎 R 无法将管道中的“i”识别为迭代器,但它确实识别“var_1”和“var_2”(因为它们正在从数据集中删除)。

有谁知道这是为什么以及如何解决它?

提前非常感谢。

最佳答案

fun <- function(x, var) {

  var_1 <- sym(paste(var, "1", sep = "_"))
  var_2 <- sym(paste(var, "2", sep = "_"))

  x %>%
    mutate(!!var := ifelse((!!var_1 != !!var_2) %in% TRUE,
                           NA, coalesce(!!var_1, !!var_2))) %>%
    select(!c(var_1, var_2))
}

cols <- c("x", "y")

Reduce(fun, cols, init = df)

#    x  y
# 1 NA  2
# 2  1  4
# 3  2  6
# 4  3  8
# 5 NA 10
# 6  4 NA
# 7 NA 13

关于r - 在 R 中使用 for 循环在管道上迭代变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73771029/

相关文章:

r - 将列分成多行并向左填充,在 R 中

javascript - 删除分号并分隔数组列表中的输出

java - 如何在Arraylist java中通过ID号搜索并显示对象?

javascript - 我需要在 for 循环中创建变量吗?

mysql - SQL语句中如何使用变量名?

r - 在 r 中安装旧版本的 dplyr (0.12)

R across 只找到正值或只找到负值 tidyverse

r - 环通环通数据帧 : How to improve performance on loop that calculates the result based on another loop through the dataset

php - 将数组转换为另一种格式

r - 在R中的多个数据框中创建一个新变量