簡體   English   中英

如何使用R為沒有數據點的列插入占位符?

[英]How to insert placeholders for columns without data points using R?

我已經使用我們的軟件進行了幾次分析。 該軟件為每個實驗生成一個單獨的文件夾,其中包含一個名為“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")

在這種形式中,它現在生成具有以下結構的文檔,因為 A03 和 A04 中沒有 DistList.txt:

A01    A02    A05
103    118    558
225    545    779
228    666    898
553    1002   1883
966    2004   NA
1112   3332   NA
NA     4556   NA
NA     5596   NA
NA     6639   NA

但是,我想要一個列表,其中不包含 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(不要忘記在執行此函數之前加載 ‹tibble› 包):

load_if_exists = function (filename, ...) {
    tryCatch(
        suppressWarnings(read.table(filename, ...)),
        error = function (x) tibble(NA)
    )
}

listData = lapply(fileList, load_if_exists)

請注意, load_if_exists使用tryCatch而不是依賴file.exists 這在您的情況下可能並不重要,但通常您不能依賴文件存在檢查,因為文件系統未同步,即理論上即使先前的文件存在檢查成功,讀取文件也可能失敗。 因此,在這種情況下, tryError更加健壯。

不幸的是,在read.table內部調用的file函數除了對不存在的文件產生錯誤外,還會愚蠢地創建警告; 我們在上面的代碼中明確禁止了這個警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM