我有一个数据帧列表,它只有几个共同的列。我有一个我想要保留的列向量。但是,有些数据帧正好有这些列,有些则缺少一些列。
如果每个数据帧都包含相同的列,我只需使用
subset(df, select = c("column", "names"))
选择我感兴趣的列。但是,如何只选择存在的列呢?
我有一个虚拟的例子,但我想用
map
或
lapply
函数在列表中,因为我的实际数据中有许多数据帧。
我的虚拟例子:
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