使用数据帧列表和向量列表并行使用子集 [英] subset in parallel using a list of dataframes and a list of vectors
本文介绍了使用数据帧列表和向量列表并行使用子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这样做:
洋葱$ 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 = )
/ pre>
洋葱< - list()
洋葱[[1]]< - yearone
名称(洋葱)< - 'yearone'
mask< - list )
mask [[1]]< - c('a','c')
名称(mask)< - 'yearone'
解决方案这是一种使用
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 < - data [[id]]%in%mask
数据[rows,]
}
Map(get_matches,data = onion,mask = mask,MoreArgs = list(id ='id'))
This works:
onion$yearone$id %in% mask$yearone
This 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]] <- yearone names(onion) <- 'yearone' mask <- list() mask[[1]] <- c('a','c') names(mask) <- 'yearone'
解决方案Here is an approach using
Map
# some data onion <- 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 matching
get_matches <- function(data, id, mask){ rows <- data[[id]] %in% mask data[rows,] } Map(get_matches , data = onion, mask = mask, MoreArgs = list(id = 'id'))
这篇关于使用数据帧列表和向量列表并行使用子集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文