Looping through files in R

后端 未结 3 1177
鱼传尺愫
鱼传尺愫 2021-01-25 02:37

I am using R to calculate the mean values of a column in a file like so:

R
file1 = read.table(\"x01\")
mean(file1$V4)

However I have no experie

相关标签:
3条回答
  • 2021-01-25 03:20

    My solution is also similar to @jmsinger but you can specify the path to your files in the code itself and then calculate the mean like this :

    filename <- system("ls /dir/",intern=TRUE)
    
    for(i in 1:length(filename)){
    
    file <- read.table(filename[i],header=TRUE) ## if you have headers in your files ##
    mean <- mean(file$V4)
    
    write.table(mean,file=paste("/dir",paste("mean",filename[i],sep="."),sep="/")) 
    ##if you wish to write the means of all the files in seperate files rather than one.
    }
    

    hope this helps

    0 讨论(0)
  • 2021-01-25 03:28

    This is similar to what @jmsigner has done, but with minor changes. For instance, writing to a file is done at the end. The code has not been tested.

    out <- lapply(list.files(), FUN = function(x) {
        m <- mean(read.table(x, header = TRUE)$V4)
        return(m)
      })
    result <- do.call("cbind", out) #merge a list column-wise
    # before writing, you can make column names pretty with colnames()
    # e.g. colnames(result) <- c("x01", "x02")
    write.table(result, file = "means.txt")
    
    0 讨论(0)
  • 2021-01-25 03:36

    Assuming the columns are always named the same, you could do the following in R:

    out.file <- 'means.txt'
    for (i in list.files()) {
        tmp.file <- read.table(i, header=TRUE)  # Not sure if you have headers or not
        tmp.mean <- mean(tmp.file1$V4)
        write(paste0(i, "," tmp.mean), out.file, append=TRUE)
    }
    

    Or the same thing with more bash:

    for i in $(ls *)
    do
      mean=$(Rscript -e "mean(read.table('$i', header=T)[, 'V4'])")
      echo $i,$mean >> means.txt
    done
    
    0 讨论(0)
提交回复
热议问题