这有效:
onion$yearone$id %in% mask$yearone
这不是:
onion[1][1] %in% mask[1]
onion[1]['id'] %in% mask[1]
为什么呢?在DF和成员中并行列中显示矢量化的明显方法(因此我在DF和成员中都存在ID时每年只获得行),即使使用for循环,但我找不到幸运表达索引的正确方法......帮助?
示例数据:
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'
答案 0 :(得分:3)
&#39; $&#39;运营商与&#39; [&#39;运营商。如果&#34;年度&#39;和&#39; ids&#39;事实上,这些列表中的第一项是您应该看到的结果与第一次调用相同:
DF[[1]][[1]] %in% memberids[[1]]
为什么我们应该认为访问yearpathall
应该给出相同的结果在这一点上完全不清楚,但使用&#34; [[&#34;运算符可能会给出一个原子向量,而使用&#34; [&#34;肯定不会。 &#34; [&#34;运算符总是返回与第一个参数相同的类的结果,因此在这种情况下,对于“DF&#39; DF&#39;和&#39;会员&#39;。 %in%运算符只是match
的中缀版本,需要原子向量作为其两个参数
答案 1 :(得分:1)
以下是使用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))
将执行匹配的函数
get_matches <- function(data, id, mask){
rows <- data[[id]] %in% mask
data[rows,]
}
Map(get_matches , data = onion, mask = mask, MoreArgs = list(id = 'id'))
答案 2 :(得分:0)
这似乎是我寻求的答案:
merge(mask[1],onion[[1]], by.x = names(mask[1]), by.y = names(onion[[1]][1]))
并应用于数据帧的并行列表:
result <- list()
for (i in 1:(length(names(onion)))) {
result[[i]] <- merge(mask[i],onion[[i]], by.x = names(mask[i]), by.y = names(onion[[i]][1]))
}