2017-01-31 19 views
1

Я являюсь основным пользователем R, которому нужна ваша помощь. У меня есть несколько файлов данных, которые я хочу обработать, создав функцию цикла; в основном, импортировать один или два файла, обрабатывать и удалять их; и повторите этот процесс несколько раз. Тем не менее, я застрял, вероятно, с простыми кодами для многих из вас. Пожалуйста, помогите мне решить эту проблему.R: создать цикл для импорта, управления (пространственного соединения) нескольких файлов

Просто я могу импортировать и обрабатывать данные с одним файлом, а затем.

test <- read.table("test.txt", header = FALSE, sep='\t', stringsAsFactors = FALSE) 
test<-as.data.frame(test) 

## prepared for spatial joining with polygon 
coordinates(test)=~lon+lat 
proj4string(test)=CRS("+proj=longlat +datum=NAD83") 

## Import gis polygon shapefile 
ZIPshp <-readShapeSpatial("D:/data/gis/Zipcode.shp",proj4string=CRS("+proj=longlat +datum=NAD83")) 

## spatial join b/w point and polygon 
test_zip <- over(test, ZIPshp[,"zipc"]) 
test_zip <- subset(test_zip, zipc!="") 

write.table(test_zip, "test_zip.csv", sep=",", na="NA", row.names = FALSE) 

Однако мне не удалось выяснить, как создать функцию петли, чтобы повторить этот процесс в несколько раз, особенно, удаление обработанного кадра данных после того, как обработка данных завершена. Вот моя пробная версия, но она все еще пропускает ключевую часть, и мне очень нужна ваша помощь. (Я также думал о do.call и lapply функций, но не придумали)

files=list.files(pattern='*.txt') 

ldf <- list() 
for (i in 1:length(files)) { 
ldf[[i]] <- read.table(files[[i]], header=FALSE, sep='\t', stringsAsFactors = FALSE) 

coordinates(ldf[[i]])=~lon+lat 
proj4string(ldf[[i]])=CRS("+proj=longlat +datum=NAD83") 
} 

(missing parts are spatial join, removal of processed data frame, and repeating this process with new data) 

Пожалуйста, помогите мне! Спасибо,

ответ

0

вы можете использовать ниже, как скелет, чтобы завершить решение

options(stringsAsFactors=FALSE) 

## Import gis polygon shapefile 
ZIPshp <- readShapeSpatial("D:/data/gis/Zipcode.shp", 
    proj4string=CRS("+proj=longlat +datum=NAD83")) 

##read in each file and process it 
lapply(list.files(pattern='*.txt'), function(txtfile) { 
    test <- read.table(txtfile, header=FALSE, sep='\t') 

    ## prepared for spatial joining with polygon 
    coordinates(test) <- ~lon+lat 
    proj4string(test) <- CRS("+proj=longlat +datum=NAD83") 

    ## spatial join b/w point and polygon 
    test_zip <- over(test, ZIPshp[,"zipc"]) 
    test_zip <- subset(test_zip, zipc!="") 

    ## output processed file as a csv 
    write.csv(test_zip, 
     paste0(tools::file_path_sans_ext(txtfile), ".csv"), 
     row.names = FALSE) 
}) 
+0

Это здорово! Он работает отлично. Я очень ценю ваш добрый ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^