Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中循环遍历数据帧名称向量?_R_For Loop_Tidyverse - Fatal编程技术网

如何在R中循环遍历数据帧名称向量?

如何在R中循环遍历数据帧名称向量?,r,for-loop,tidyverse,R,For Loop,Tidyverse,我想在R中循环一个数据帧名称向量。下面是我要做的。最后一个代码块不太有效。我试着用get()和paste0()的组合将“j”放在括号中,但是运气不好 library(tidyverse) starwars blue <- starwars %>% filter(eye_color=="blue") brown <- starwars %>% filter(eye_color=="brown")

我想在R中循环一个数据帧名称向量。下面是我要做的。最后一个代码块不太有效。我试着用
get()
paste0()
的组合将“j”放在括号中,但是运气不好

library(tidyverse)
starwars

blue <- starwars %>% 
        filter(eye_color=="blue")
brown <- starwars %>% 
         filter(eye_color=="brown")

df_set <- Filter(function(x) is.data.frame(get(x)), ls())

#This is what I want to do for one data frame
for (i in 1:nrow(blue)) {
  if (is.na(blue$mass[i])) {
    blue$mass[i] <- 10000
  }
}

#How do I loop through all data frames as specified in vector df_set?
for (j in df_set) {
  for (i in 1:nrow(j)) {
    if (is.na(j$mass[i])) {
      j$mass[i] <- 10000
    }
  }
}
库(tidyverse)
星球大战
蓝色%
过滤器(眼睛颜色=“蓝色”)
棕色%
过滤器(眼睛颜色=“棕色”)

df_set我们可以使用
映射
循环数据集的
列表
,并使用标准的tidyverse函数用值替换
NA

library(dplyr)
library(purrr)
library(tidyr)
df_set_new <- map(df_set, ~ .x %>%
                  mutate(mass = replace_na(mass, 10000)))
库(dplyr)
图书馆(purrr)
图书馆(tidyr)
df_设置_新建%
突变(质量=替换_na(质量,10000)))
数据
df_set如果您想使用循环,请遵循@gregordomas的建议,将数据帧存储在如下列表中:

library(tidyverse)
#Data
blue <- starwars %>% 
  filter(eye_color=="blue")
brown <- starwars %>% 
  filter(eye_color=="brown")

df_set <- Filter(function(x) is.data.frame(get(x)), ls())

#List
List <- list(blue,brown)
names(List) <- df_set

#Loop
for (i in df_set) 
{
  List[[i]]$mass <- ifelse(is.na(List[[i]]$mass),10000,List[[i]]$mass)
}
循环完成后,您将有:

sum(List$blue$mass)
[1] 71038.2
如果您需要环境中的数据帧,可以使用:

#Code
list2env(List,envir = .GlobalEnv)

新的数据帧将具有您在循环中所做的更改。

实际的用例要复杂得多,并且其结构使得在嵌套的for循环中,在数据帧名称的列表或向量上循环是首选的解决方案。
sum(List$blue$mass)
[1] 71038.2
#Code
list2env(List,envir = .GlobalEnv)