Differents lengths in original x, x1 and z lists is the first problem, how can you say which z values is related to each x and x1 values?
x <- c(-10, 1:6, 50) x1<- c(-20, 1:5, 60) z<- c(1,2,3,4,5,6,7,8) length(x) [1] 8 length(x1) [1] 7 length(z) [1] 8
Another problem is here:
x<- x[!(x %in% bx$out)] #remove this x1 <- x1[!(x1 %in% bx1$out)] #remove this x_to_remove<-which(x %in% bx$out) x <- x[!(x %in% bx$out)] x1_to_remove<-which(x1 %in% bx1$out) x1 <- x1[!(x1 %in% bx1$out)]
You clean x
and x1
before calculating x_to_remove
and x1_to_remove
EDIT: To achieve your desired output try this code (/ode lines added signed in comments):
x <- c(-10, 1:6, 50) x1<- c(-20, 1:5, 60) z<- c(1,2,3,4,5,6,7,8) length_max<-min(length(x),length(x1),length(z)) #Added: identify max length before outlier detection bx <- boxplot(x) bx1 <- boxplot(x1) x_to_remove<-which(x %in% bx$out) x <- x[!(x %in% bx$out)] x1_to_remove<-which(x1 %in% bx1$out) x1 <- x1[!(x1 %in% bx1$out)] z<-z[-unique(c(x_to_remove,x1_to_remove))] length_min<-min(length(x),length(x1),length(z)) #Minimum length after outlier remove d=data.frame(cbind(x[1:length_min],x1[1:length_min],z[1:length_min])) #Bind columns colnames(d)<-c("x","x1","z") d_NA<-as.data.frame(matrix(rep(NA,(length_max-length_min)*3),nrow=(length_max-length_min))) #Create NA rows colnames(d_NA)<-c("x","x1","z") d<-rbind(d,d_NA) #Your desired output d x x1 z 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 NA NA NA