我知道類似的問題已被多次問過,但不知何故,我被困在非常接近解決方案的地方。做一些研究并沒有讓我更接近。作為 R 的初學者,我可能會問錯誤的問題/搜索錯誤的關鍵字。在這種情況下,歡迎您提供幫助。
我有一個檔案夾,其中包含多個帶有“;”的 .csv 檔案 作為分隔符。這些檔案有兩列構成 id。所有表都有不同的大小,例如行數和列數不同。
例如,資料如下所示:
| 姓名 | 延期 | 資料1 | 資料2 | 資料 n |
|---|---|---|---|---|
| 保羅 | ch | 7 | 9 | n1 |
| 起訴 | 數控 | 0 | 8 | n2 |
| 起訴 | ch | 6 | 8 | n3 |
| 等等。 |
資料具有以下邏輯:data1 包括來自 1 個樣本的所有資料(樣本名稱:data1),并包括名稱出現的次數,無論是 nc 還是 ch。
我現在的目標是將所有這些表格整合到一個組合資料框中。
首先,我嘗試使用 for 函式進行迭代,但結果不佳。后來我遇到了一種 tidyverse 方法,如下所示:
files <- dir(path = "~/Documents/data", pattern = "*.csv")
data <- files %>%
map(read_csv2(paste("~/Documents/data", files, sep = "/"))) %>%
reduce(full_join)
data
這開始作業,但失敗并出現錯誤:
0sError: Files must all have 31 columns: 0s
* File 2 has 34 columns
這是我卡住的地方。我認為當資料框被編譯成串列時會出現問題。在我看來,資料框必須具有相同的擴展名。在我在堆疊和其他地方找到的示例中,示例資料始終具有相同的長度。
誰能幫我找出錯誤?
最良好的祝愿
uj5u.com熱心網友回復:
map語法是map(list, function). read_csv2(paste("~/Documents/data", files, sep = "/")不是一個函式,它試圖read_csv2在所有檔案上運行,但read_csv2沒有被 vecrorized。更改為purrr樣式 lambda 語法,如下所示。我還強烈建議by在您的聯接中指定列,尤其是完全聯接,以確保您得到您認為的結果并且結果不會擴大。
files %>%
map(~read_csv2(paste("~Documents/data", ., sep = "/")) %>%
reduce(full_join, by = c("name", "extension"))
如果你需要更多的除錯,給自己一個小例子,一次做一行。比如說,從前兩個檔案開始files2 <- files[1:2]并開始閱讀。當它作業時,繼續加入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/428833.html
