使用数据帧列表和向量列表并行使用子集 [英] subset in parallel using a list of dataframes and a list of vectors

查看:139
本文介绍了使用数据帧列表和向量列表并行使用子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这样做:

 洋葱$ 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 < - 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆