如何使用R为没有数据点的列插入占位符?

如何使用R为没有数据点的列插入占位符?,r,list,csv,dataframe,missing-data,R,List,Csv,Dataframe,Missing Data,我已经用我们的软件做了几个实验,并进行了分析。 该软件为每个实验生成一个单独的文件夹,其中包含一个名为“DistList”的.txt文件,如果该软件能够分析图像的话。如果不能这样做,则没有.txt文件。 通常,如果存在DistList,则文件夹排列如下所示: 为了将所有这些.txt文件放在一起,我已经制作了一个R脚本: setwd("~/Desktop/Results/.") fileList <- list.files(path = ".", recursive = TRUE, pa

我已经用我们的软件做了几个实验,并进行了分析。 该软件为每个实验生成一个单独的文件夹,其中包含一个名为“DistList”的.txt文件,如果该软件能够分析图像的话。如果不能这样做,则没有.txt文件。 通常,如果存在DistList,则文件夹排列如下所示:

为了将所有这些.txt文件放在一起,我已经制作了一个R脚本:

setwd("~/Desktop/Results/.")

fileList <- list.files(path = ".", recursive = TRUE, pattern = "DistList.txt", full.names = TRUE)

listData <- lapply(fileList, read.table)

names(listData) <- basename(dirname(fileList))

library(tidyverse)
library(reshape2)

bind_rows(listData, .id = "FileName") %>%
  group_by(FileName) %>%
  mutate(rowNum = row_number()) %>%
  dcast(rowNum~FileName, value.var = "V1") %>%
  select(-rowNum) %>%
  write.csv(file="Result.csv")
但是,我希望有一个列表,其中不包含DistList.txt文档的文件夹也会列在生成的.csv文件中,例如:

A01    A02    A03   A04   A05
103    118    NA    NA    558
225    545    NA    NA    779
228    666    NA    NA    898
553    1002   NA    NA    1883
966    2004   NA    NA    NA
1112   3332   NA    NA    NA
NA     4556   NA    NA    NA
NA     5596   NA    NA    NA
NA     6639   NA    NA    NA
但我不知道,我必须如何修改我的脚本,使它产生这样一个列表。如果我只有很少的实验,那就没问题了。但在我的例子中,有数百个这样的列,如果缺少任何内容,手动验证将花费太多时间


如果你能帮我解决这个问题,我将非常感激

最简单的方法是修改前两行,即文件列表和加载:

fileList = file.path(dir(path = ".", pattern = "A\\d+", full.names = TRUE), "DistList.txt")
这将为所有文件夹生成文件列表,即使相应的
DistList.txt
文件不存在。接下来,如果它们存在,我们将加载它们,否则我们只返回一个包含单个
NA
(在执行此函数之前,不要忘记加载ètibble›包):

请注意,
load\u if_exists
使用
tryCatch
而不是依赖
file.exists
。在您的情况下,这可能不重要,但一般来说,您不能依赖文件存在性检查,因为文件系统不同步,即理论上,即使先前的文件存在性检查成功,读取文件也可能失败<因此,code>tryError在这种情况下更加健壮


不幸的是,在
read.table
中内部调用的
file
函数除了为不存在的文件创建错误外,还会愚蠢地创建一个警告;我们在上面的代码中明确禁止此警告。

感谢您的帮助。不幸的是,如果没有DistList.txt文件,它还不能工作。然后,它在文件(文件,“rt”):无法打开文件A01/DistList.txt:没有这样的文件或目录´@Hotshot-Gotcha中生成错误消息´1:In。看固定答案。请注意,您发布的错误消息实际上只是一个我们可以忽略的警告。但是,代码中仍然存在一个错误。实际上,请考虑<代码>警告=函数(…)>代码>块的代码> > TyTrace,并使它返回<代码> TiBLE(NA)< /代码>。
fileList = file.path(dir(path = ".", pattern = "A\\d+", full.names = TRUE), "DistList.txt")
load_if_exists = function (filename, ...) {
    tryCatch(
        suppressWarnings(read.table(filename, ...)),
        error = function (x) tibble(NA)
    )
}

listData = lapply(fileList, load_if_exists)