将列表转换为数据帧时包括项目编号

时间:2016-12-30 04:47:22

标签: r list dataframe

我正在尝试将项目列表转换为数据框,并将项目编号与数据框中的新行保持一致。

我想保留1800个样本的前6行数据,但数据以列表形式返回。当我将列表转换为数据框时,由于某些项目在批处理过程中没有返回任何数据,因此,我无法跟踪哪些项来自哪些项目,因此未显示在新数据框中。我粘贴了下面列表中前6项的数据。

- 我的工作流程如下:

out <-lapply(out, head)

out

[[1]]
           ID sequencedescription             database           citation
1  MNAG563-08              COI-5P BOLD: Public Records BOLD Systems, 2016
2  MNAG564-08              COI-5P BOLD: Public Records BOLD Systems, 2016
3  IAWL696-09              COI-5P BOLD: Public Records BOLD Systems, 2016
4 LPOKD816-10              COI-5P BOLD: Public Records BOLD Systems, 2016
5  GMEM065-11              COI-5P BOLD: Public Records BOLD Systems, 2016
6 GMGSA075-12              COI-5P BOLD: Public Records BOLD Systems, 2016
  taxonomicidentification similarity
1             Lepidoptera          1
2             Lepidoptera          1
3             Lepidoptera          1
4             Lepidoptera          1
5             Lepidoptera          1
6             Lepidoptera          1
  specimen_country specimen_lat specimen_lon
1    United States       39.717          -78
2    United States       38.991      -77.235
3    United States        30.08      -97.167
4    United States        36.74       -95.95
5    United States      33.4156     -89.2606
6    United States      35.6859     -83.4986

...

[[5]]
           ID sequencedescription             database           citation
1   MEC818-04              COI-5P BOLD: Public Records BOLD Systems, 2016
2 RDLQE057-06              COI-5P BOLD: Public Records BOLD Systems, 2016
3  LNCB034-06              COI-5P BOLD: Public Records BOLD Systems, 2016
4 RDLQI742-09              COI-5P BOLD: Public Records BOLD Systems, 2016
5 RDLQI756-09              COI-5P BOLD: Public Records BOLD Systems, 2016
6 BBLSW607-09              COI-5P BOLD: Public Records BOLD Systems, 2016
  taxonomicidentification similarity
1             Lepidoptera          1
2             Lepidoptera          1
3             Lepidoptera          1
4             Lepidoptera          1
5             Lepidoptera          1
6             Lepidoptera          1
  specimen_country specimen_lat specimen_lon
1           Canada      45.3967      -75.849
2           Canada       45.465      -73.075
3    United States       34.768      -76.764
4           Canada      49.2417      -72.423
5           Canada      45.4998     -76.3522
6    United States       33.883      -96.821

[[6]]
NULL

- 然后我转换为数据框

out_frame <- do.call("rbind", lapply(out, data.frame))

- 然后写入xlsx文件并首先尝试将ID#1分配给前6行,将ID#2分配给接下来的6行,但由于项目6返回NULL,因此它不会排队。

2 个答案:

答案 0 :(得分:0)

这是使用数据框列表的解决方案:

out <- list(
  data.frame(a=10:30, b=20:40),
  data.frame(a=10:50, b=20:60),
  NULL
)

out2 <- lapply(seq(along=out), function(i) {
  df <- out[[i]]
  if(!is.null(df)) df$ID <- i
  df
})

out_frame <- do.call(rbind, lapply(out2, head))

out_frame

答案 1 :(得分:0)

感谢您的回复。我能够尝试多种方法,发现在读取数据时设置stringsAsFactors = FASLE,然后在请求输出之前使用setNames函数分配原始ID。然后将输出转换为数据帧并写入xlsx,原始ID保留在第一列中。