Hi,
The rownames part is not clear as your expected output and input files didn't 
show them as rownames. 


##Suppose you have all the files in a folder
##here I am creating the names of those files

files1 <- paste0("sample", rep(1:777, each=29),"chr",1:29,".txt")
length(files1)
#[1] 22533
lst1 <-  split(files1,as.numeric(gsub(".*chr(\\d+)\\..*","\\1",files1)))

##use list.files() 

##in your case, ##not tested

lst1 <- split(list.files(pattern="sample\\d+"), 
as.numeric(gsub(".*chr(\\d+)\\..*","\\1",list.files(pattern="sample\\d+")))) 
##in case other files are also in the folder

library(plyr)

lst2 <- lapply(lst1,function(x) {x1 <-join_all(lapply(x,function(y) 
read.table(y,header=TRUE,stringsAsFactors=FALSE,sep="")),c("Name","Chr","Position"))
 })


lapply(seq_along(lst2),function(i) 
write.table(lst2[[i]],paste0("LRRrawallchr",i,".txt"),row.names=FALSE,quote=FALSE))


###if you need to create rownames using the first three columns:
lapply(seq_along(lst2),function(i) {x1 <- lst2[[i]]; row.names(x1) <- 
as.character(interaction(x1[,1:3],sep="_")); x2 <- x1[,-(1:3)]; write.table(x2, 
paste0("LRRrawallchr",i,".txt"), quote=FALSE)})



A.K.


I would like to use the `cbind` in a list of files. However each file are 
splited in a specific chromosome (chr) `(k in 1:29)`, and specific sample `(i 
in 1:777)`. The files are like:


sample1chr1.txt, sample1chr2.txt ... sample1chr29.txt, sample2chr1.txt ... 
sample777chr29.txt

All files have exactly the same rows names (3 first collumns represent my row 
names). I would like to get a final file to each chr merging to all sample 
files, with and do not repeat the row names in the final file (the first 3 
collumns representing my rows names).

I tried this:

`#Creating file with row names (3 first collumns) to each Chr
{
{for(k in 1:29){
  infile <- paste0("sample1chr",k,".txt")
  outfile <- paste0("LRRrawallchr",k,".txt")
  rows <- read.table(infile, header=TRUE, sep="\t")
  rows <- rows[, -grep("Log.R.Ratio", colnames(rows))]
  write.table(rows, outfile, sep=";")}}`

`#Cbind in one file per Chr
{  for(i in 1:777)
  for(k in 1:29){
    base <- paste0("LRRrawallchr",k,".txt")
    chr <- read.table(base, header=TRUE, sep=";")
    infile <- paste0("sample",i,"chr",k,".txt")
    chr2 <- read.table(infile, header=TRUE, sep="\t")
    outfile <- paste0("LRRrawallchr",k,".txt")
    chr2 <- chr2[, -grep("Name", colnames(chr2))]
    chr2 <- chr2[, -grep("Chr", colnames(chr2))]
    chr2 <- chr2[, -grep("Position", colnames(chr2))]
    chr <- cbind(chr, chr2)
    write.table(chr, outfile, sep=";", row.names=FALSE, col.names=FALSE)}
}`

Input example (sample1chr1.txt):

   

     Name   Chr Position sample1value
    BAC-11034 1 128           0.302
    BAC-11044 1 129           -0.56
    BAC-11057 1 134           0.0840

Input example (sample2chr1.txt):

    Name   Chr Position  sample2value
    BAC-11034 1 128           0.25
    BAC-11044 1 129           0.41
    BAC-11057 1 134          -0.14

Expected output (LRRrawallchr1):

    Name       Chr Position    sample1value   sample2value
    BAC-11034 1 128        0.302          0.25
    BAC-11044 1 129        -0.56          0.41
    BAC-11057 1 134        0.0840         -0.14

I have 22553 diferent .txt files (29 files (one per chr) to each of 777 
samples). All 22553 files (sample1chr1.txt, sample1chr2.txt ... 
sample1chr29.txt, sample2chr1.txt ... sample777chr29.txt) are like above 
example.  

I wanna 29 files like (LRRrawallchr1), one per Chr. The "LRRrawallchr,k," files 
have to be with 777+3 (800 collumns). The 3 row names and one collumn per 
sample.

Cheers! 


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to