У меня есть список фреймов данных, которые имеют только несколько общих столбцов.У меня есть вектор столбцов, которые я хочу сохранить.Но некоторые фреймы данных содержат именно эти столбцы, а некоторые отсутствуют в некоторых из них.
Если бы каждый фрейм данных содержал одинаковые столбцы, я бы просто использовал 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