我有几十个不同长度的CSV文件。一些csv文件具有18列,而另一些具有9列。它们共享相同的列名称。我想按变量名读入每个文件的某些列。
这是我正在处理的一个小例子。
df1 <- tibble(a = 1:2, b = letters[1:2], c = NA, e=7:8)
df2 <- tibble(a = 8:9, b = letters[7:8], e = 8:9, c = NA)
df3 <- tibble(a = 8:9, b = letters[7:8], c = NA, d=5:6, e=7:8)
我想插入a,b和e列。我无法指定列位置,因为它们在每个数据集中的位置都不同。我需要在每个文件中使用变量名来读取这些列。
这是我开始只读取所需列的功能。我不能真正使用它,因为每个csv文件的列位置差异很大,以至于它拉错了列。
read_fun = function(path){
test = read.csv(path, sep=",", header=F, fill = TRUE, colClasses = c(rep("NULL",2), "character",rep("NULL",2),
rep("character",14), rep("NULL",5)),
skip = 1, nrows = 17)
test$question = path
test
}
我知道col.names允许您在阅读时对列进行重命名,这对我没有帮助。
R是否可以通过每个文件的变量名来读取文件?
类似的东西:
test = read.csv("fileA.csv", sep = ",", col_names = c("a","b","e"))
请帮忙!
答案 0 :(得分:0)
如果每个文件不是很大,并且不需要花时间阅读,则先读后选策略将起作用。如果自动类型检测无法正常工作,则可能需要在链的末尾添加mutate
来调整列类型。
library(tidyverse)
read_fun <- function(path) {
read_csv(path) %>%
select(a, b, e)
}
如果要将所有data.frame合并为一个,请使用map_dfr
:
df_combined <-
c("file1.csv", "file2.csv", "file3.csv") %>%
map_dfr(funcion(path) {
read_csv(path) %>%
select(a, b, e) %>%
mutate(a = as.numeric(a),
b = as.character(b),
e = as.numeric(e))
})