2014-04-19 3 views
0

저는 R에서 정말 초보자입니다. 제가 얻을 수있는 도움을 주시면 감사하겠습니다.CSV 파일의 조합으로 특정 열의 평균

하나의 데이터 프레임으로 결합한 다음 2 열 또는 3 열 중 하나를 의미하는 파일이 있습니다. 시도했지만 바보 같은 실수를하고 있거나 완전히 잘못된 것일 수 있습니다.

polmean <- function(directory, pol, id = 1:3) { 
    Dataframe <- function (id) { 
      Filenames <- list.files (pattern = "*.csv") 
      Reqfiles <- Filenames [id] 
      LoadReqfiles <- lapply(Reqfiles, read.csv) 
      } 
    x <- Dataframe (id) 
    Colomnmeans <- function (pol, removeNA = TRUE) {    
      means <- 0 
      if (pol == "sulfate") { 
      means <- mean (x[,2], na.rm = removeNA) 
      } else { 
      means <- mean (x[,3], na.rm = removeNA) 
      } 
       means 
      } 
    Colomnmeans (pol, removeNA = TRUE) 
    }  

이렇게하면 오류가 발생합니다. x [, 2] 잘못된 치수 수입니다.

고마워요.

답변

1

여기 몇 가지 실수를 저지르고 있습니다. 실수 # 1 : 함수 Dataframe이 값을 반환하지 않습니다. (아래 참조) 실수 # 2 : lapply을 사용하면 결과가 목록입니다. 따라서 x은 데이터 프레임이 list이고 ?data.frame이 아닙니다. 따라서 데이터 프레임 목록의 다른 열에 액세스 할 수 없습니다. 데이터 프레임을 반복해야합니다. 위의 코드에서, 나는 길이가 0 인 벡터이다 NULL으로 초기 값을 사용하고 있음을

polmean <- function(directory, pol, id = 1:3) { 
    Dataframe <- function (id) { 
    Filenames <- list.files(directory,pattern=".csv",full.names=TRUE) 
    Reqfiles <- Filenames[id] 
    LoadReqfiles <- lapply(Reqfiles, read.csv) 
    return(LoadReqfiles) # Mistake1: Need to return the value 
    } 
    x <- Dataframe(id) 
    Colomnmeans <- function (pol, removeNA = TRUE) {    
    means <- NULL 
    if (pol == "sulfate") { 
     for(i in 1:length(x)) means <- c(means,x[[i]][,2])  
    } else { 
     for(i in 1:length(x)) means <- c(means,x[[i]][,3]) 
    } 
    mean(means, na.rm = TRUE) 
    } 
    Colomnmeans(pol, removeNA = TRUE) 
}  

참고 :

그래서이 일을하려고합니다. 시도 :

length(NULL) 

을 그래서 0의 초기 값을 사용하는 것이 아니라 mean의 기능이하지 않습니다 엉망.

희망이 도움이됩니다!