[R] Add function to each row excluding certain columns

arun smartpink111 at yahoo.com
Wed Oct 9 23:57:12 CEST 2013

No problem.
It depends upon how many columns you want to delete, or if they have any common names as in "Restriction"

example1<- as.matrix(read.table("example1.txt",header=TRUE,stringsAsFactors=FALSE,sep="\t",row.names=1,check.names=FALSE))
indx<- which(!grepl("Restriction", colnames(example1))) 

#[1] 1 2 3 4
# Changing names of some of the columns
colnames(example1)[8:9] <- paste("CARP", 1:2)

#[1] "BARN"          "BCGE"          "BCVN"          "BEAN"         
#[5] "Restriction 1" "Restriction 2" "Restriction 3" "CARP 1"       
#[9] "CARP 2"    

#Using the previous code:
indx<- which(!grepl("Restriction", colnames(example1))) 
#[1] 1 2 3 4 8 9

#Remove both "Restriction" and "CARP" columns
 indxNew <- which(!grepl("Restriction|CARP", colnames(example1)))
#[1] 1 2 3 4

example1New <- cbind(example1,`MAX without Restriction`=apply(example1[,indxNew],1,max,na.rm=TRUE))

#If there is any specific pattern that is followed for the removal process, you should mention.
#For example, removing every 3rd column or so:
indx2<- colnames(example1)[(((seq_len(ncol(example1))-1)%%3)+1)!=3]
#[1] "BARN"          "BCGE"          "BEAN"          "Restriction 1"
#[5] "Restriction 3" "CARP 1"    



Thank you for the fast answer! 

Is there any way to use the first solution way, but work with 
the column names instead of the number of the column. Because in further
 calculation I need to drop more columns than just the restriction ones 
and the real dataset has to many columns to work with the position of 
the column. 

Kind regards 
----- Original Message -----
From: arun <smartpink111 at yahoo.com>
To: R help <r-help at r-project.org>
Sent: Wednesday, October 9, 2013 4:56 PM
Subject: Re: Add function to each row excluding certain columns

example1<- as.matrix(read.table("example1.txt",header=TRUE,stringsAsFactors=FALSE,sep="\t",row.names=1,check.names=FALSE))
example2 <- example1 
example1New <- cbind(example1, `MAX without Restriction`=apply(example1[,1:4],1,max,na.rm=TRUE))
`MAX without Restriction`<- rowMaxs(example2[ ,colnames(example2)[!grepl("Restriction", colnames(example2))]],na.rm=TRUE)
 example2New <- cbind(example2, `MAX without Restriction`)
#[1] TRUE



I've got a matrix of the following form 

        BARN    BCGE    BCVN    BEAN    Restriction 1    Restriction 2    Restriction 3    Restriction 4    Restriction 5 
alpha.1    0.000172449    7.87E-05    -0.003271044    0.000921609    9.28E-19    2.00E-05    -0.000608211    NA    NA 
alpha.2    0.000896744    0.000579453    -0.000623357    0.001260358    -1.36E-19    -5.22E-05    NA    NA    NA 
alpha.3    0.000832748    0.00076229    0.002170229    0.001159895    3.09E-19    -7.86E-05    NA    NA    NA 
alpha.4    0.000920545    NA    0.001680433    0.000459149    -3.08E-19    -3.59E-05    NA    NA    NA 
alpha.5    0.001385238    0.000527484    0.000593311    0.000549358    7.72E-19    -6.99E-05    NA    NA    NA 
alpha.6    0.000644262    0.000305714    -0.00044514    0.000407448    -9.68E-20    -5.56E-05    NA    NA    NA 
alpha.7    -0.00022808    -0.00017047    0.000109545    0.000601197    0    3.50E-05    NA    NA    NA 
alpha.8    -1.16E-05    -0.000105657    0.001403036    0.00058719    3.88E-19    8.64E-06    NA    NA    NA 
alpha.9    0.000633559    -4.33E-05    0.000724611    0.000841646    -4.82E-20    -3.29E-05    NA    NA    NA 

(see also file) 

Now I'd like to calculate the maximal value of each row, but
exclude Restriction 1-5. An add a new column to the given matrix with 
the name 'MAX without Restriction' and the max of each row. 

I tried 


but it gave a strange output, also I couldn't manage to exclude the columns Restriction 1-5. 

Thank you for your help!! 

More information about the R-help mailing list