我想将我的几个文件合并到一个文件中。我从网站上的一个帖子中找到了代码,并按照我自己的用法进行了调整:
library(dplyr)
library(readr)
df2 <- list.files(pattern = "test_.*\\.csv",full.names = TRUE) %>%
lapply(read_csv) %>%
bind_rows %>%
transmute(Isolate=Iso,
Condit=Condit,
rep=rep,
set=set,
hpi=hpi,
OD=OD)
但是我收到了这个错误:
Error in mutate_impl(.data, dots) : binding not found: 'Iso'
我不明白为什么。有人能帮助我吗?
非常感谢!
输入文件1:test_.1.csv
Iso rep set Condit hpi OD
1 A22.1 1 3 T27 84 0.232
2 A22.1 2 3 T27 84 0.23
3 A22.1 3 3 T27 84 0.214
4 D2.1 1 3 T27 84 0.049
5 D2.1 2 3 T27 84 0.054
6 D2.1 3 3 T27 84 0.049
输入文件2:test_.2.csv
Iso rep set Condit hpi OD
1 A22.1 1 3 T27 72 0.191
2 A22.1 2 3 T27 72 0.186
3 A22.1 3 3 T27 72 0.179
4 D2.1 1 3 T27 72 0.048
5 D2.1 2 3 T27 72 0.053
答案 0 :(得分:2)
我已运行您的代码并收到相同的错误消息
错误:未找到绑定:'Iso'
read_csv
包中的原因似乎是readr
。当用于读取单个文件时,
read_csv("test_.1.csv")
返回:
Parsed with column specification:
cols(
`Iso rep set Condit hpi OD` = col_character()
)
# A tibble: 6 × 1
`Iso rep set Condit hpi OD`
<chr>
1 A22.1 1 3 T27 84 0.232
2 A22.1 2 3 T27 84 0.23
3 A22.1 3 3 T27 84 0.214
4 D2.1 1 3 T27 84 0.049
5 D2.1 2 3 T27 84 0.054
6 D2.1 3 3 T27 84 0.049
所以,read_csv
显然不知道如何将行拆分成列。
使用fread()
包中rbindlist()
和data.table
的代码对我有用。它会根据OP的请求更改Iso
列的名称。此外,它还会添加一列指示每行的来源。
file_names <- list.files(pattern = "test_.*\\.csv", full.names = TRUE)
library(data.table)
df2 <-
rbindlist(
lapply(file_names, fread), idcol = "file_id"
)[, file_id := basename(file_names)[file_id] # add origin
][, setnames(.SD, "Iso", "Isolate")] # rename one column
df2
# file_id Isolate rep set Condit hpi OD
# 1: test_.1.csv A22.1 1 3 T27 84 0.232
# 2: test_.1.csv A22.1 2 3 T27 84 0.230
# 3: test_.1.csv A22.1 3 3 T27 84 0.214
# 4: test_.1.csv D2.1 1 3 T27 84 0.049
# 5: test_.1.csv D2.1 2 3 T27 84 0.054
# 6: test_.1.csv D2.1 3 3 T27 84 0.049
# 7: test_.2.csv A22.1 1 3 T27 72 0.191
# 8: test_.2.csv A22.1 2 3 T27 72 0.186
# 9: test_.2.csv A22.1 3 3 T27 72 0.179
#10: test_.2.csv D2.1 1 3 T27 72 0.048
#11: test_.2.csv D2.1 2 3 T27 72 0.053