R将数据框列表中的列提取到列表中

时间:2019-10-09 11:41:03

标签: r list loops dataframe

我有一个非常具体的问题。我有一个数据框列表:

AB_df = data.frame(replicate(2,sample(0:130,201,rep=TRUE)))
BC_df = data.frame(replicate(2,sample(0:130,200,rep=TRUE)))
DE_df = data.frame(replicate(2,sample(0:130,197,rep=TRUE)))
FG_df = data.frame(replicate(2,sample(0:130,203,rep=TRUE)))
AB_pc = data.frame(replicate(2,sample(0:130,201,rep=TRUE)))
BC_pc = data.frame(replicate(2,sample(0:130,200,rep=TRUE)))
DE_pc = data.frame(replicate(2,sample(0:130,197,rep=TRUE)))
FG_pc = data.frame(replicate(2,sample(0:130,203,rep=TRUE)))

df_list = list(AB_df, BC_df, DE_df, FG_df, AB_pc, BC_pc, DE_pc, FG_pc)
names(df_list) = c("AB_df", "BC_df", "DE_df", "FG_df", "AB_pc", "BC_pc", "DE_pc", "FG_pc")

我现在想将每个第二个数据帧的第一列提取到一个称为“已选择”的列表中,并将其他数据帧提取到一个称为“未选择”的列表中。我尝试使用循环和序列进行此操作。这些序列为我提供了正确的列表条目,但是在我的输出列表中,我始终只会得到相同的条目。到目前为止,这是我的尝试:

picked = list()
unpicked = list()

for (a in 1:(length(df_list)/2)) {
  for (b in seq(1,length(df_list), by = 2)){
    for (c in seq(2,length(df_list), by = 2)) {
      picked[[a]] = df_list[[b]][[1]]
      unpicked[[a]] = df_list[[c]][[1]]}}}

我想我很亲近,但是仍然有些不对劲。

2 个答案:

答案 0 :(得分:1)

我们可以使用lapply选择每隔一个数据帧(picked)的第一列,然后选择unpicked中的其余数据帧。

picked <- lapply(df_list[c(FALSE, TRUE)], `[`, 1)
unpicked <- lapply(df_list[c(TRUE, FALSE)], `[`, 1)

我们使用FALSE / TRUE选择其他列表元素。因此,这里我们从数据中选择元素2、4、6和8以及[子集的第一列。对于unpicked,我们选择列表元素1、3、5和7并获得其第一列。

答案 1 :(得分:0)

我们可以splitlist进行拣选和未拣选

lst1 <- lapply(split(seq_along(df_list), seq_along(df_list) %%2), 
          function(i) df_list[i][1])