繁体   English   中英

如何在嵌套循环中遍历多个数据帧和变量以将变量值更改为 R 中缺失

[英]How do I loop through several dataframes and variables in a nested loop to change values of variables to missing in R

我有几个具有类似变量的数据帧,我想循环(示例中的变量“a”和“c”),以便将某些值(-1、9、98)更改为缺失值(NA)。 我想通过一个嵌套循环来实现这一点,方法是将数据帧放在一个列表中,并将我想要循环的变量名放在一个向量中。

df1 <- data.frame(a = c(-1, 1, 0, 3), b = c(4, 9, 0, -1), c = c(2, 0, 98, -1), d = c(3, 4, 3, 0))
df2 <- data.frame(a = c(3, 4, -1, 98), b = c(1, 3, 2, 9), c = c(9, -1, 0, 2), d = c(1, 4, 0, -1))
df3 <- data.frame(a = c(2, 4, 3, -1), b = c(9, 98, 0, 2), c = c(1, 2, -1, 1), d = c(3, 3, 0, 1))
df4 <- data.frame(a = c(-1, -1, 0, 0), b = c(4, -1, 9, 0), c = c(9, -1, 2, 0), d = c(1, -1, 2, 0))

dfs <- list(df1, df2, df3, df4)

vars <- c("a", "c")



for(i in dfs) {
  for(x in vars) {
    i %>% replace_with_na(replace = list(x = c(-1, 9, 98)))
  } 
}

我在想像上面提到的代码。 replace_with_na取自naniar package。

在最后一步中,我想再次从列表中提取数据帧(我还没有找到如何做)。

感谢您的任何建议!

您可以在此任务上使用tidyverse方法:

library(dplyr)
library(purrr)

dfs %>% 
  map(~mutate(.x, across(vars, ~ifelse(.x %in% c(-1, 9, 98), NA, .x))))

这返回

[[1]]
   a  b  c d
1 NA  4  2 3
2  1  9  0 4
3  0  0 NA 3
4  3 -1 NA 0

[[2]]
   a b  c  d
1  3 1 NA  1
2  4 3 NA  4
3 NA 2  0  0
4 NA 9  2 -1

[[3]]
   a  b  c d
1  2  9  1 3
2  4 98  2 3
3  3  0 NA 0
4 NA  2  1 1

[[4]]
   a  b  c  d
1 NA  4 NA  1
2 NA -1 NA -1
3  0  9  2  2
4  0  0  0  0

我采用与 Martin Gal 相同的 tidyverse 方法。 要提取回数据帧,您需要将 map 的map分配给 dfs,然后执行

dfs %>% walk2(seq_along(dfs), ~assign(paste0("df",.y), .x, envir = .GlobalEnv))

或者,只需在map调用walk2之后调用 walk2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM