首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在R中循环遍历数据帧名称的向量?

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

Stack Overflow用户
提问于 2020-10-14 21:26:08
回答 2查看 85关注 0票数 0

我想在R中循环一个数据帧名称的向量。下面是我想要做的大致。最后一个代码块并不是很有效。我试过把"j“放在括号里,使用get()paste0()的组合,但还没有成功。

代码语言:javascript
运行
复制
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
    }
  }
}
EN

回答 2

Stack Overflow用户

发布于 2020-10-14 21:28:39

我们可以使用map遍历数据集的list,并使用标准的tidyverse函数将NA替换为value

代码语言:javascript
运行
复制
library(dplyr)
library(purrr)
library(tidyr)
df_set_new <- map(df_set, ~ .x %>%
                  mutate(mass = replace_na(mass, 10000)))

数据

代码语言:javascript
运行
复制
df_set <- list(blue, brown)
票数 0
EN

Stack Overflow用户

发布于 2020-10-14 21:37:48

如果您想使用循环,请遵循@GregorThomas,的伟大建议,将您的数据帧存储在如下列表中:

代码语言:javascript
运行
复制
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)
}

一些检查:

在此之前,您需要:

代码语言:javascript
运行
复制
sum(List$blue$mass)
[1] NA

在循环之后,您将拥有:

代码语言:javascript
运行
复制
sum(List$blue$mass)
[1] 71038.2

如果您需要环境中的数据帧,您可以使用:

代码语言:javascript
运行
复制
#Code
list2env(List,envir = .GlobalEnv)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64354332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档