首页 > 解决方案 > 循环列表中的数据帧

问题描述

我想创建一个新的逻辑变量(传输),指示向量(mrn)的每个元素是否存在于 6 个数据帧中。我在一个名为传输的列表中有 6 个数据帧。下面的代码可以满足我的要求,但效率低下。

mer_tpa1520 <- mer_tpa1520 %>% 
  mutate(transfer = ifelse(mrn %in% transfers[[1]]$`MRN #` | 
                              mrn %in% transfers[[2]]$`MRN #` |
                              mrn %in% transfers[[3]]$`MRN #` |
                              mrn %in% transfers[[4]]$`MRN #` |
                              mrn %in% transfers[[5]]$`MRN #` |
                              mrn %in% transfers[[6]]$`MRN #`,
                            TRUE, FALSE))

我试图用下面的代码来实现这一点,但没有成功。if 语句没有向量化,我不知道如何使它与 ifelse 一起工作。

for (i in 1:length(transfers)){
    if(mer_tpa1520$mrn %in% transfers[[i]]$`MRN #`){
           mer_tpa1520$transfer <- TRUE
    }
  }

谢谢你。

标签: rfor-loop

解决方案


也许,如果您的数据不需要这种特定结构(data.frames 列表):

# bind all data frames in the list. 
# The name of each item in the original list is saved in the new columns "data.frame.name"

df <- bind_rows(transfers, .id = "data.frame.name")

现在这应该更容易了,尽管我不确定它在你需要的意义上是否有效。

# Creating a new "transport" variable in mer_tpa1520
mer_tpa1520$transfer <- mer_tpa1520$mrn %in% df$`MRN #`

推荐阅读