我想创建一个新的逻辑变量(传输),指示向量 (mrn) 的每个元素是否存在于 6 个数据帧中。我在名为 transfers 的列表中有 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
}
}
谢谢。
答案 0 :(得分:0)
也许,如果您的数据不需要这种特殊结构(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 #`