我有一个表格列表:
a <- c(1:10)
b <- c(11:20)
c <- c(31:40)
df1 <- data.frame(a,b,c,id="A")
df2 <- data.frame(a,b,c,id="B")
df3 <- data.frame(a,b,c,id="C")
List1 <- list(df1,df2,df3)
List1
如何从列表中选择具有id ==“C”
的表格感谢您的帮助。
答案 0 :(得分:3)
您可以使用其值id
为列表中的每个数据框命名,然后使用常规列表子集操作选择C
。
names(List1) <- sapply(List1, function(x) x[1, "id"])
List1[["C"]]
答案 1 :(得分:2)
获得此功能的众多方法之一是使用列表索引sapply
中的[[
。
> List1[[which(sapply(List1, function(x) levels(x$id)) == "C")]]
# a b c id
# 1 1 11 31 C
# 2 2 12 32 C
# 3 3 13 33 C
# 4 4 14 34 C
# 5 5 15 35 C
# 6 6 16 36 C
# 7 7 17 37 C
# 8 8 18 38 C
# 9 9 19 39 C
# 10 10 20 40 C
或使用逻辑子集而不是which
> List1[sapply(List1, function(x) levels(x$id)) == "C"]
## or
> m <- mapply(function(x, y){ levels(x[[y]]) }, List1, "id") == "C"
> List1[m]
答案 2 :(得分:1)
我确信那里有一个班轮,但我在下面写了一个快速功能:
getsub <- function(x) {for(i in 1:length(x)){
if(all(x[[i]]$id== "C")){
return(x[[i]])
} else {
next
}
}}
R> getsub(List1)
a b c id
1 1 11 31 C
2 2 12 32 C
3 3 13 33 C
4 4 14 34 C
5 5 15 35 C
6 6 16 36 C
7 7 17 37 C
8 8 18 38 C
9 9 19 39 C
10 10 20 40 C
R>
答案 3 :(得分:0)
易于理解的功能:
> getlist = function(mylist){
+ for(i in 1:length(mylist)) {ifelse(mylist[[i]]$id=='C', return(mylist[[i]]),"")}
+ }
>
>
> getlist(List1)
a b c id
1 1 11 31 C
2 2 12 32 C
3 3 13 33 C
4 4 14 34 C
5 5 15 35 C
6 6 16 36 C
7 7 17 37 C
8 8 18 38 C
9 9 19 39 C
10 10 20 40 C
>