R-如何根据条件向量对存储在列表中的所有数据帧进行子集

时间:2018-12-19 15:48:57

标签: r dataframe lapply

这是我第一次在这里问问题,所以请告诉我是否需要更改我的操作方式。我已经寻找了一段时间,但找不到所需的东西。

我有3个数据框的列表。它们具有相同的结构(变量),但观察数量不同。我想根据向量中存储的几种条件,为列表中的每个数据帧获取几个子集。

因此,如果我有5个条件,则需要为列表中的3个数据框的每一个获取这些数据框的5个子集,因此共有15个。

例如:

df1 <-data.frame(replicate(3,sample(0:10,10,rep=TRUE)))
df2 <-data.frame(replicate(3,sample(0:10,7,rep=TRUE)))
df3 <-data.frame(replicate(3,sample(0:10,8,rep=TRUE)))

my_list <- list(df1, df2, df3)

conditions <- c(2, 5, 7, 4, 6)

我知道如何使用lapply来对其中一种情况进行子集化

list_subset <- lapply(my_list, function(x) x[which(x$X1 == conditions[1]), ])

但是我想对向量条件中的所有值执行此操作。 我希望这是有道理的。

2 个答案:

答案 0 :(得分:1)

这次再次满足以下条件:

df1 <-data.frame(replicate(3,sample(0:10,10,rep=TRUE)))
df2 <-data.frame(replicate(3,sample(0:10,7,rep=TRUE)))
df3 <-data.frame(replicate(3,sample(0:10,8,rep=TRUE)))

my_list <- list(df1, df2, df3)

conditions <- c(2, 5, 7, 4, 6)

list_subset <- lapply(my_list, function(x) x[which(x$X1 == conditions[1]), ])

#One Way, Conditions on first list
list.of.list_subsets <- lapply(conditions,function(y){
  lapply(my_list, function(x) x[which(x$X1 == y), ])
})
#The other way around
list.of.list_subsets2 <- lapply(my_list,function(x){
  lapply(conditions, function(y) x[which(x$X1 == y), ])
})

答案 1 :(得分:1)

一种选择是先根据{X1'列先过滤<script type="text/javascript"> $(document).ready(function() { $('#expend').prop('checked', false); }); </script> ,然后过滤%in%

split