我有3个清单data.frame
s:
my_list <- list(a = data.frame(value = c(1:5), class = c(letters[1:3],"a", "b")), b = data.frame (value = c(6:1),class=c(letters[1:4],"a", "b")),c=data.frame(value = c(1:7),class = c(letters[5:1],"a", "b")))
my_list
$a
value class
1 1 a
2 2 b
3 3 c
4 4 a
5 5 b
$b
value class
1 6 a
2 5 b
3 4 c
4 3 d
5 2 a
6 1 b
$c
value class
1 1 e
2 2 d
3 3 c
4 4 b
5 5 a
6 6 a
7 7 b
我想进入每个列表并按字母对它们进行子集化a
and b
来自class
柱子:
wanted_sub_class <- c("a", "b")
然后将结果放入列表中my_list
per class
.
Edit- 预期输出:
$a class a
value class
1 a
4 a
$a class b
value class
2 b
5 b
$b class a
value class
4 a
2 a
$b class b
value class
5 b
1 b
$c class a
value class
5 a
6 b
$c class b
value class
4 b
7 b
我尝试用双循环来做到这一点:
result <- list()
for (i in 1:length(my_list)) {
for (j in wanted_sub_class {
result [[i]] <- subset(my_list[[i]], my_list[[i]]$class == j)
}
}
这应该给我 6 个列表元素(根据预期输出),但它只给出 3 个且仅 的元素b
.
然而,理想情况下,如果实际上可能的话,我想将结果放在一个列表中my_list
per class
。所以我想保留列表中的 3 个 data.frames 的结构,然后在其中包含类数据的列表a
and b
- 否则,六个列表即可
我知道循环并不理想,但我无法真正理解矢量化(例如使用 lapply)。我希望得到循环(如果可能的话)和矢量化的答案。