如何在R中循环遍历数据帧名称向量?
我想在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")
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)