我有一个数据框列表,只有几个共同的列。我有一个列向量希望保留。但是,有些数据框恰好具有这些列,有些则缺少其中的几列。
如果每个数据框都包含相同的列,则只需使用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
您可以使用以下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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句