Hi, Try either: Ceramic <- read.table("ceramic.dat",header=TRUE) Ceramic1 <- Ceramic Ceramic$indx <- ((seq_len(nrow(Ceramic))-1)%/%60)+1 library(plyr) DF1 <- data.frame(M=as.vector(t(ddply(Ceramic,.(indx), colwise(mean))[,-1])), S=as.vector(t(ddply(Ceramic,.(indx),colwise(sd))[,-1])),Rep = 60) ?colnames(DF)[3] <- colnames(DF1)[3] ?identical(DF,DF1) #[1] TRUE #or ?indx <- ((seq_len(nrow(Ceramic))-1)%/%60)+1 Ceramic2 <-? do.call(data.frame, c(aggregate(.~indx,data=Ceramic1,function(x) c(mean(x),sd(x))), check.names=FALSE))[,-1] ?DF2 <- data.frame(M= as.vector(t(Ceramic2[,seq(1,ncol(Ceramic2),by=2)])), S= as.vector(t(Ceramic2[,seq(2,ncol(Ceramic2),by=2)])),Rep =60) identical(DF,DF2) #[1] TRUE A.K. please help me to short the code #To import data onto R Ceramic<-read.table("D:/ceramic.dat",header=T) #to obtain mean, standard deviation and number of observations- LAB1<-Ceramic[1:60,] LAB2<-Ceramic[61:120,] LAB3<-Ceramic[121:180,] LAB4<-Ceramic[181:240,] LAB5<-Ceramic[241:300,] LAB6<-Ceramic[301:360,] LAB7<-Ceramic[361:420,] LAB8<-Ceramic[421:480,] M1<-sapply(LAB1,mean) M2<-sapply(LAB2,mean) M3<-sapply(LAB3,mean) M4<-sapply(LAB4,mean) M5<-sapply(LAB5,mean) M6<-sapply(LAB6,mean) M7<-sapply(LAB7,mean) M8<-sapply(LAB8,mean) S1<-sapply(LAB1,sd) S2<-sapply(LAB2,sd) S3<-sapply(LAB3,sd) S4<-sapply(LAB4,sd) S5<-sapply(LAB5,sd) S6<-sapply(LAB6,sd) S7<-sapply(LAB7,sd) S8<-sapply(LAB8,sd) #tabulating results- M<-c(M1,M2,M3,M4,M5,M6,M7,M8) S<-c(S1,S2,S3,S4,S5,S6,S7,S8) DF<-data.frame(M,S,c(rep(60)))