Для цикла для подмножества списка фреймов данных

#r #list #dataframe #subset

#r #Список #фрейм данных #подмножество

Вопрос:

У меня есть список фреймов данных:

 df1<-data.frame("A"=1:10, "B"=c("Mark","John","Lucas","Helen","Rachel","Leyla","Tina","Fanny","Emma","Kate"),"C"=c(91:100))
df2<-data.frame("A"=1:8, "B"=c("Mark","John","Lucas","Helen","Rachel","Leyla","Tina","Fanny"),"C"=c(93:100))
df3<-data.frame("A"=1:3, "B"=c("Mark","John","Lucas"),"C"=c(98:100))
all_df<-list(df1,df2,df3)
 

И я хотел бы создать новый список фреймов данных, подмножеств по столбцам, например:

 df1_sub<-df1[,c("B","C")]
df2_sub<-df1[,c("B","C")]
df3_sub<-df1[,c("B","C")]
all_df_sub<-list(df1_sub,df2_sub,df3_sub)
 

Наконец, присвоение каждому новому фрейму данных его имени:

 mynames<-c("df1_sub","df2_sub","df3_sub")
names(all_df_sub)<-mynames
 

Я хотел бы сделать это, используя lapply for цикл and , но я не мог понять, как, поскольку я застрял где-то между определением функции и подмножеством списка фреймов данных (я не очень уверен в этом, я безуспешно проверял старые похожие вопросы). Это то, что я пытаюсь сделать до сих пор:

 all_df_sub<-lapply(all_df, function(all_df){
  for([[i]] in all_df) {
    a<-[[i]][,c("B","C")]
    } 
  all_df } )
 

Любое предложение будет с благодарностью. Спасибо!

Ответ №1:

Вы можете попробовать это:

 all_df_sub <-lapply(all_df, function(dat){dat[2:3]})
all_df_sub <-setNames(all_df_sub, c("df1_sub","df2_sub","df3_sub"))