我有一个数据文件列表,其中只有几个共同的列。我想保留一个列的向量。但是,有些数据文件确实有这些列,有些则少了几列。
如果每个dataframe都包含相同的列,我只需使用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 发布于 2019-01-22 13:27:38
您可以使用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 10https://stackoverflow.com/questions/54309121
复制相似问题