根据通用列合并长度不一致的.csvs

时间:2019-03-06 13:49:11

标签: r csv dplyr

下午(或早上,晚上)

我正在尝试合并几个布局相似的.csv文件,它们在一个列(character)中有一个类,而在另一列中有很多(num)。

当以data.frame的示例导入时,将是:

print(one[1:5,])
  X                            Class Abundance_inds
1 1                      Chaetognath              2
2 2     Copepod_Calanoid_Acartia_spp              9
3 3 Copepod_Calanoid_Centropages_spp              4
4 4      Copepod_Calanoid_Temora_spp              1
5 5         Copepod_Calanoid_Unknown             55 

class列(行数和顺序)根据找到的内容更改每个csv,我想根据class列绑定多个(30+)csv,我有以下(我确定是前一段时间工作的....):

DensityFiles <- list.files(CSVdirectory,
                           pattern = '.csv',
                           full.names = T)

Combined <- rbindlist(
  lapply(
    DensityFiles,
    fread),
  fill = TRUE,
  use.names = TRUE)

这将产生以下结果:

str(Combined)    
Classes ‘data.table’ and 'data.frame':  461 obs. of  3 variables:

不完全是我的追求!我正在寻找以下内容:

> print(example)
    X                            Class CSV.NAME CSV.NAME.1
1   1                   Bivalve_Larvae        1          3
2   2                   Bryozoa_Larvae        4          6
3   3                      Chaetognath       NA          7
4   4                         Cnidaria        1          8
5   5     Copepod_Calanoid_Acartia_spp       22         NA
6   6     Copepod_Calanoid_Calanus_spp       24          4
7   7     Copepod_Calanoid_Candacia_sp        5          3
8   8 Copepod_Calanoid_Centropages_spp       41          2
9   9      Copepod_Calanoid_Temora_spp       39          8
10 10         Copepod_Calanoid_Unknown      458         NA
11 11  Copepod_Cyclopoid_Corycaeus_spp       46         NA
12 12    Copepod_Cyclopoid_Oithona_spp       NA          4
13 13     Copepod_Cyclopoid_Oncaea_spp       NA          7
14 14             Copepod_Harpacticoid       36         NA
15 15                  Copepod_Nauplii       12          9

使用时,我可以使用idcol = "origin"将CSV名称添加到列标题中 data.tablerbindlist。但不确定是否适用于所有解决方案。

我四处游历,但大多数示例似乎都在处理一致数量的行,

任何帮助将不胜感激!

吉姆

1 个答案:

答案 0 :(得分:0)

您可以使用readrbind_rows

library(dplyr)
library(readr)
df <- do.call(bind_rows, lapply(DensityFiles,read_csv))