簡體   English   中英

如何遍歷 R 中的數據框名稱向量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM