根据存储在另一个列表中的索引在列表中存储的数据帧的R列中进行子集

时间:2019-01-26 08:48:59

标签: r

我很不熟悉列表中存储的数据帧,对不起,但是我有以下问题:

假设我在列表中存储了多个数据帧,我想根据第一列的索引到最后一列的索引对一定数量的列进行子集划分,这些列总是与每个数据帧不同。

示例:

    df1

    c1. c2. c3 c4 c5 
    1.  a.  4.  d. 7
    2.  b.  5.  e. 8
    3.  c.  6.  f. 9

    df2

    c1. c2. c2_1 c3 c3_1  c4 c5 
    1.  a.  a1    4  4a    d. 7
    2.  b.  b1    5  5a    e. 8
    3.  c.  c1    6  6a    f. 9

df3

    c1. c2. c4 c5 
    1.  a.  d. 7
    2.  b.  e. 8
    3.  c.  f. 9

Output df1

df1

    c1. c2. c3 c4 
    1.  a.  4.  d.
    2.  b.  5.  e.
    3.  c.  6.  f.

Output df2

df2

    c1. c2. c2_1 c3 c3_1  c4  
    1.  a.  a1    4  4a    d. 
    2.  b.  b1    5  5a    e. 
    3.  c.  c1    6  6a    f. 

Ouput df3

df1

    c1. c2. c4 c5 
    1.  a.  d. 7
    2.  b.  e. 8
    3.  c.  f. 9

假设我要从c1列到c4列进行子集化,但是,c4列在列表中存储的所有数据帧中具有不同的索引。

因此,有了此循环,我得到了所有数据帧中所有c1列和c4列的索引。 数据帧存储在list_df

c1_index<-list()
for(i in seq_along(list_df)){
  c1_index[[i]] <-which(colnames(list_df[[i]])== "c1")
}

c4_index<-list()
for(i in seq_along(list_df)){
  c4_index[[i]] <-which(colnames(list_df[[i]])== "c4")
}

然后我合并起始索引和结束索引的两个列表:

c1_c4_index <- mapply(append, c1_index, c4_index, SIMPLIFY = FALSE)

现在我有了一个整数列表,其中包含我想作为子集的列的索引。

str(c1_c4_index)
List of 3
$ : int 1 4
$ : int 1 6
$ : int 1 3

现在,如何编写一个for循环,根据存储在c1_c4_index中的索引对list_df中所有df中的列进行子集设置?

我写了这样的东西,但似乎不起作用:

list_new<-list()
for(i in seq_along(c1_c4_index)){
  list_new[[i]]<-list_df[[i]][, list_df[[i]] %in% c1_c4_index[[i]]]
}

非常感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:0)

我想我已经找到了解决方法:

list_new<-list()
for(i in seq_along(list_df)){
  list_new[[i]]<-list_df[[i]][c(c1_index[[i]]:c4_index[[i]])]
}

请,如果有人知道如何更有效地做到这一点,请告诉我