我有几百个csv文件,里面有不同类型的环境数据。例如,它们的标题都有[sensor_id]、[sensor_type]、[timestamp]、[long]、[lat]列。一些有另一个柱[温度],其他的可能有[压力]
我想写一个脚本,它只读取温度数据,并跳过不存在该列的csv。不幸的是,当它无法在某些csv中找到温度列时,它会导致错误。
这些是我尝试过的事情:
file_list<-list.files(path='path', full.names = TRUE, pattern="*.csv")
cind <- c("sensor_id", "sensor_type", "lat", "lon", "timestamp", "temperature")
#attempt 1 - this leads to an undefined columns selected error
collate1 <- lapply(file_list, function(x) read.csv(x, sep=";", header=TRUE)[cind])
#attempt 2 - I try to skip files that lead to an error, but it still has an undefined columns selected error
collate2 <- tryCatch(lapply(file_list, function(x) read.csv(x, sep=";", header=TRUE)[cind]),
warning = function(e) print(paste('no temperature')))
#attempt 3 - I try some kind of if statement but I don't quite understand the output
collate3 <- lapply(file_list, function(x){
df <- read.csv(x, sep=";", header=TRUE)
df_new <- df[,c("sensor_id", "sensor_type", "lat", "lon", "timestamp")]
if("temperature" %in% colnames(df) ){
return(df_new$temperature == df$temperature)
} else {return(NA)
}
})
collate3 <- collate3 [sapply(is.na, collate3 )]
有非常大量的数据,所以我很想找出一些可以快速工作的东西。
谢谢
`
2条答案
按热度按时间bweufnob1#
读取每个文件的第一行以找出所需的文件。
然后读入这些文件:
yptwkmov2#
方法1:读取所有文件,然后过滤
"temperature"
存在的列表:方法2:如果文件太多,可以先阅读几行来确定要读取的文件。