本文介绍了使用数据帧列表和向量列表并行使用子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 这样做: 洋葱$ yearone $ id%in%mask $ yearone 这不是: 洋葱[1] [1]%mask%1 onion [1] ['id']%in%mask [1] 为什么?没有一个明显的方式来向量化DF和成员中的并行列(所以我每年只能在DF和成员中都存在id),我使用for循环,但是我并不幸运地找到表达索引的正确方法...帮助? 示例数据 yearone< - data.frame(id = c(b,b,c,a,a),v = )洋葱< - list()洋葱[[1]]< - yearone 名称(洋葱)< - 'yearone' mask< - list ) mask [[1]]< - c('a','c')名称(mask)< - 'yearone' / pre> 解决方案这是一种使用 Map #一些数据洋葱< - 复制(5,data.frame(id = sample(letters [1:3] 5,T),v = 1:5), simplified = F) mask< - replicate(5,sample(letters [1:3],2),simplified = F)名称(洋葱)< - 名称(mask)< - paste0('year',se q_along(洋葱)) 将匹配的功能 get_matches< - function(data,id,mask){ rows 数据[rows,] } Map(get_matches,data = onion,mask = mask,MoreArgs = list(id ='id')) This works:onion$yearone$id %in% mask$yearoneThis doesn't:onion[1][1] %in% mask[1]onion[1]['id'] %in% mask[1]Why? Short of an obvious way to vectorize in parallel columns in DF and in memberids (so I only get rows within each year when ids are present in both DF and memberids), im using a for loop, but I'm not being lucky at finding the right way to express the index... Help?Example data:yearone <- data.frame(id=c("b","b","c","a","a"),v=rnorm(5))onion <- list()onion[[1]] <- yearonenames(onion) <- 'yearone'mask <- list()mask[[1]] <- c('a','c')names(mask) <- 'yearone' 解决方案 Here is an approach using Map # some dataonion <- replicate(5,data.frame(id = sample(letters[1:3], 5,T), v = 1:5), simplify = F)mask <- replicate(5, sample(letters[1:3],2), simplify = F)names(onion) <- names(mask) <- paste0('year', seq_along(onion))A function that will do the matchingget_matches <- function(data, id, mask){ rows <- data[[id]] %in% mask data[rows,]}Map(get_matches , data = onion, mask = mask, MoreArgs = list(id = 'id')) 这篇关于使用数据帧列表和向量列表并行使用子集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-26 20:26