R:从数据框列表中选择列,而一些数据框中不存在某些列

时间:2019-01-22 13:14:31

标签: r

我有一个数据框列表,只有几个共同的列。我有一个列向量希望保留。但是,有些数据框恰好具有那些列,有些则缺少其中的几列。

如果每个数据框都包含相同的列,则只需使用subset(df, select = c("column", "names"))选择感兴趣的列。但是,如何只选择存在的列?

我有一个虚拟的示例,但是我希望在列表上使用maplapply函数,因为我的真实数据中有很多数据框。

我的虚拟示例:

df1<- data.frame(a  = seq(0,5),
                 b  = seq(5,10),
                 cc = seq(10,15))

df2<- data.frame(a  = seq(0,5),
                 b  = seq(5,10),
                 d = seq(10,15))


ls <-list(df1, df2)

# select columns,  "cc" column is missing from df2
keep<-c("b", "cc")

如何修改此功能以仅选择数据框中存在的列?

lapply(ls, function(x) subset(x, select = keep) )

列数不均匀的预期输出:

[[1]]
   b cc
1  5 10
2  6 11
3  7 12
4  8 13
5  9 14
6 10 15

[[2]]
   b 
1  5 
2  6 
3  7 
4  8 
5  9 
6 10 

1 个答案:

答案 0 :(得分:2)

您可以使用intersect函数:

> intersect(c("a", "b", "c"), c("a", "b"))
[1] "a" "b"

即像这样修改您的功能:

> lapply(ls, function(x) subset(x, select = intersect(keep, colnames(x))))
[[1]]
   b cc
1  5 10
2  6 11
3  7 12
4  8 13
5  9 14
6 10 15

[[2]]
   b
1  5
2  6
3  7
4  8
5  9
6 10