下载多个CSV文件(激光雷达数据),为列命名并加入每个文件

时间:2018-04-16 14:47:09

标签: r csv lidar

嗨来到R社区!

我是一个新的R用户,经过几个小时的搜索后,我希望你能帮我解决问题并了解错误的位置。

所以,我有来自法国Litto3D程序的激光雷达数据。我需要使用十二个图块来使用几种插值来生成数字场模型(我将比较不同的插值方式)。 为此,我开始使用Surfer,因为数据的高度,并将方法转移给我的同事和所有需要它的人。

我做了什么以及我尝试做什么:首先,我更改了XYZ文件的文件扩展名(包含XYZ激光雷达点),并使用代码为R中的12个图块充电。 它似乎已经工作但现在我想在同一时间给我所有文件的列号命名(因为它们目前没有任何名称),这正是它不再起作用的地步。我出现了一个错误:“换行时出错:'文件'必须是字符串或连接”

整个代码:

List.filesxyz   = list.files("Donnees_pour_tests",pattern = ".xyz",recursive=F,full.names = T)

xyztest=List.filesxyz

old_filenames <- List.filesxyz

new_filenames <- replace_extension(List.filesxyz,"txt")

file.rename (old_filenames,new_filenames)

List.filestxt = list.files("Donnees_pour_tests",pattern = ".txt",recursive=F,full.names = T)

csvtest=List.filestxt

old_filenames <- List.filestxt

new_filenames <- replace_extension(List.filestxt,"csv")

file.rename (old_filenames,new_filenames)

setwd("C:/Mydirectory/Rspatial2018/data/Donnees_pour_tests")

list.files(pattern=".csv$")

list.filenames<-list.files(pattern=".csv$")

list.filenames

list.data<-list()

for (i in 1:length(list.filenames))
{
  list.data[[i]]<-read.csv(list.filenames[i])
}

names(list.data)<-list.filenames

list.data[1]

import.multiple.csv.files<-function(mypath,mypattern,...)
{
  tmp.list.1<-list.files(mypath, pattern=mypattern)
  tmp.list.2<-list(length=length(tmp.list.1))
  for (i in 1:length(tmp.list.1)){tmp.list.2[[i]]<-read.csv(tmp.list.1[i],...)}
  names(tmp.list.2)<-tmp.list.1
  tmp.list.2
}

csv.import<-import.multiple.csv.files("C:/Mydirectory/Rspatial2018/data/Donnees_pour_tests/",".csv$",sep=" ", dec=".")

save(import.multiple.csv.files,file="C:/Mydirectory/Rspatial2018/data/Donnees_pour_tests/")

data = read.csv(list.data,header=FALSE,sep=" ", dec = ".")

setnames(data, old=c("V1","V2","V3", "V4", "V5", "V6"),     new=c("X","Y","Z","Classe","Intensite_signal_retour","Temps_GPS_absolu"))
  }

我希望你能帮助我。我仍然会在网上找到他的解决方案:) 多谢! 同盟

2 个答案:

答案 0 :(得分:0)

如果我理解你的意图正确,一个简单的for循环就会做你想要的。

# list of files
filelist <- dir(pattern='csv$')
# read files and rename the columns
for (i in filelist) {
    x <- read.csv(i)
    names(x) <- c("X","Y","Z","Classe","Intensite_signal_retour","Temps_GPS_absolu")
    write.csv(x, i, row.names=F)
}

答案 1 :(得分:0)

我终于找到了一种简单的方法来做同样的事情。我首先收费并合并了我所有的CSV文件,并且我创建了一个包含所有这些文件的数据框(第一个代码不是这种情况,只有第一个文件被采用)。然后我给数据框的列命名,如果我需要作为单个表,我现在可以导出。

如果有人需要,我会分享代码:

## import and merging of the CSV files in a single table (dataframe)##

multmerge <- function(mypath = getwd()){ #getwd correspond to the call of the directory where are the data## 
  require(dplyr)
  dataset <- list.files(path=mypath, full.names=TRUE, pattern="*.csv") %>% lapply(read.csv, header=F, sep=" ") %>% bind_rows()
  dataset
}
AllCSVFiles <-  multmerge(mypath=getwd())

###############################################################

#### give a name to the columns ####
head(AllCSVFiles) #to read the first rows and columns#
setnames(AllCSVFiles,old=c("V1","V2","V3","V4", "V5", "V6"), new=c("X","Y","Z","Classe","Intensite_signal_retour","Temps_GPS_absolu"))
head(AllCSVFiles) #to check the new names of the columns#

见啊!