【问题标题】:merge .csvs based on common column but of inconsistent length基于公共列合并 .csvs 但长度不一致
【发布时间】:2019-07-28 05:03:40
【问题描述】:

下午(或早上、晚上)

我正在尝试合并几个具有相似布局的 .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 

类列(行数和顺序)根据找到的内容更改每个 csv,我想根据类列绑定几个(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。但不确定这是否适用于所有解决方案。

我已经进行了很好的搜索,但大多数示例似乎都在处理一致的行数,

任何帮助将不胜感激!

吉姆

【问题讨论】:

  • 你能举一个你期望输出的例子吗? rbindlist() 的输出有什么意外/错误?
  • 所有的csv都有相同的标题吗?
  • 您好,请查看更新后的问题!是的,它们都有相同的标题。会不会是第 1 栏搞砸了? (现在将尝试)
  • 它不是 R 在写入 CSV 时放入的第一列。

标签: r csv dplyr


【解决方案1】:

您可以使用readrbind_rows

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

【讨论】:

  • 您好,感谢您的回复,但我已经尝试过此选项,它产生的结果与上面的代码相同。
猜你喜欢
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多