2016-10-17 7 views
0

세 개의 행렬 데이터 파일 (LAT, LON, DATA)을 가져 와서 세 개의 열이있는 하나의 CSV 파일로 결합하는 기능이 있습니다. 그러나 이는 2010 년에서 2015 년까지의 일별 데이터 시리즈 중 하루 동안의 일이므로 데이터 파일 디렉터리에 적용해야합니다. LAT 및 LON 파일은 날짜별로 DATA 파일 만 달라지지 않습니다. 제 질문은 간단합니다 :이 함수를 내 디렉토리에 어떻게 적용하여 새 CSV 파일의 이름에 날짜가 포함 된 새 CSV 파일을 제공합니까? 생각? 나는 행운이없는 몇 가지 것을 시도했다. 여기 내 코드 :디렉토리에 함수 적용

####PR PRAG WATER DATA XYZ### 
setwd("/Users/andrewbudsock/Dropbox/Research/ActualET_PR") 
LON<-read.csv("LONGITUDE.csv") 
LAT<-read.csv("LATITUDE.csv") 
ET<-read.csv("actual_ET20100101.csv") 
###STACKOVERFLOW TRY###### 
myList<-list(LON=LON, LAT=LAT, ET = ET) 
    lapply(myList, function(x){ 
    as.matrix(x) %>% 
     as.numeric() 
    }) %>% 
    as.data.frame() 
Flat<-na.omit(flattened) 
write.csv("flat.csv", Flat) 

DataName<-seq(as.Date("2010-01-01"), as.Date("2015-12-31"), by = 'day') 
as.list(DataName) 
write.csv(Flat, "xyz.csv"); 

#loop all files in 
files <- list.files(path="/Users/andrewbudsock/Dropbox/Research/ActualET_PR", pattern="*.csv", full.names=T, recursive=FALSE) 
lapply(files, function(x) { 
    t <- read.table(x, header=T) # load file 
    # apply function 
    out <- function(t){ 
    for(i in length(t)){ 
     myList= list(LAT=LAT, LON=LON, ET=t[i]) 
     lapply(myList, function(x){ 
     as.matrix(x) %>% 
      as.numeric() 
     }) %>% 
     as.data.frame() 
     Flat<-na.omit(flattened) 
    } 
    } 
    # write to files 
    write.table(out, "/Users/andrewbudsock/Dropbox/Research/ActualET_PR/R", paste(DataName, ".csv", sep = ""), sep="\t", quote=F, row.names=F, col.names=T) 
}) 

답변

0

파일을 별도로 작성해야합니까? 다른 말로하면, 하나의 파일에 모든 데이터를 포함하는 것이 좋을까요 (더 좋을까요?). 그렇다면 위의 파일 이름이 정확하다고 가정하면이 파일 이름과 함께 모든 파일 이름을 저장할 수 있습니다 (위도/경도를 명시 적으로 가져 와서 첫 번째 열이됩니다).

out <- 
    lapply(myList, function(x){ 
    as.matrix(x) %>% 
     as.numeric() 
    }) %>% 
    as.data.frame() 
:

myList <- 
    lapply(myfiles, read.csv) 

그런 다음, 당신의 이전 질문에서 lapply 통화에 전체 목록을 전달합니다 다음 dplyr

myfiles <- 
    c(
    # LAT/LONG files 
    list.files(pattern = "*TUDE.csv") 
    # Data files 
    , list.files(pattern = "^actual_ET") 
    ) %>% 
    # Set names by removing csv or the leading portion 
    setNames(gsub("\\.csv|actual_ET", "", .)) 

를 사용하여있는 목록에 모든 값을 읽을 수 있습니다

그리고 모든 데이터가 들어있는 하나의 data.frame이 생성됩니다.

대신 각 날짜마다 별도의 파일이 필요하면 위의 데이터를 읽고 다음 코드를 사용할 수 있어야합니다. 그러면 myList (위도/경도)의 처음 두 항목이 건너 뛴 다음 출력 파일의 이름을 지정하기 위해 위에 설정된 이름을 사용하여 각 날짜에 대해 새 파일을 생성합니다. 또한 결과 파일을 변수 sepOuts에 저장해 두었 습니다만 이것이 꼭 필요한 것은 아닙니다.

sepOuts <- 
    lapply(seq(3, length(myList), 1), function(idx){ 

    out <- 
     lapply(myList[c(1,2,idx)], function(x){ 
     as.matrix(x) %>% 
      as.numeric() 
     }) %>% 
     as.data.frame() 

    write.csv(out, paste0("fileNameLeader_" 
          , names(myList)[idx] 
          , "_anyTrailingName.csv")) 

    return(out) 
    }) %>% 
    setNames(names(myList)[-c(1,2)]) 
+0

안녕하세요. 이것에 대한 마지막 문제가 하나 있습니다. 어떤 이유로 : –

+0

list.files (pattern = "actual_ET * .csv")가 0 값을 반환하고 있습니다. 파일 이름은이 실제 _ET20151224.csv와 같이 구조화되며 날짜별로 변경됩니다. 어떤 생각이 어떻게 해결할 수 있습니까? –

+0

죄송합니다. 체크 아웃 할 파일이 없으므로'list.files' 패턴 매칭의 이상한 점을 잊어 버렸습니다. 기억이 안 나는 이유 때문에'*'를 처리하지 않습니다. 대신에,'list.files (pattern = "^ actual_ET")'를 사용해 "actual_ET"로 시작하는 것을 모두 찾으십시오. –