如何解决按名称读入一组csv列
我有几十个不同长度的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,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",rep("character",14),5)),skip = 1,nrows = 17)
test$question = path
test
}
我知道col.names允许您在阅读时对列进行重命名,这对我没有帮助。
类似的东西:
test = read.csv("fileA.csv",sep = ",col_names = c("a","b","e"))
请帮忙!
解决方法
如果每个文件不是很大,并且不需要花时间阅读,则先读后选策略将起作用。如果自动类型检测无法正常工作,则可能需要在链的末尾添加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,e) %>%
mutate(a = as.numeric(a),b = as.character(b),e = as.numeric(e))
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。