0

嗨,R 社区!

我是一个新的 R 用户,经过数小时的搜索,我希望你能帮助我解决我的问题并了解错误在哪里。

所以,我有来自法国 Litto3D 程序的激光雷达数据。我需要使用 12 个图块来生成使用几种插值的数字场模型(我将比较不同的插值方式)。为此,由于数据量大,我开始使用 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"))
  }

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

4

2 回答 2

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)
}
于 2018-04-16T16:44:40.887 回答
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#

再见!

于 2018-04-20T13:28:41.940 回答