[英]How do you loop through a vector of data frame names in R?
我想遍歷 R 中的數據框名稱向量。下面大致是我想要做的。 最后一個代碼塊不太好用。 我嘗試將“j”放在括號中,使用get()
和paste0()
,但還沒有運氣。
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
}
}
}
我們可以使用map
循環遍歷數據集list
,並使用標准的 tidyverse 函數將NA
替換為 value
library(dplyr)
library(purrr)
library(tidyr)
df_set_new <- map(df_set, ~ .x %>%
mutate(mass = replace_na(mass, 10000)))
df_set <- list(blue, brown)
如果您想使用循環遵循@GregorThomas的重要建議,請將您的數據幀存儲在如下列表中:
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] NA
循環后,您將擁有:
sum(List$blue$mass)
[1] 71038.2
如果您需要環境中的數據幀,您可以使用:
#Code
list2env(List,envir = .GlobalEnv)
新的數據幀將具有您在循環中所做的更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.