Another possibility: IE <- speciesTime1[,-1] - speciesTime2[,-1] Imm <- data.frame(addmargins(as.matrix(ifelse(IE<0, -1, 0)*IE), 2)) Imm Exti <- data.frame(addmargins(as.matrix(ifelse(IE>0, 1, 0)*IE), 2)) Exti
------------------------------------- David L Carlson Associate Professor of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of arun Sent: Thursday, May 30, 2013 5:38 PM To: Kristi Glover Cc: R help Subject: Re: [R] How can I write logical function in R? Hi, May be this helps: speciesTime1New<- speciesTime1[,-1] speciesTime2New<- speciesTime2[,-1] imm1<-as.data.frame(matrix(0,4,3)) imm1[]<-lapply(seq_len(ncol(speciesTime2New)),function(i) ifelse(speciesTime2New[,i]==1& speciesTime2New[,i]!=speciesTime1New[,i],1,0)) Ext1<-as.data.frame(matrix(0,4,3)) Ext1[]<-lapply(seq_len(ncol(speciesTime1New)),function(i) ifelse(speciesTime1New[,i]==1& speciesTime1New[,i]!=speciesTime2New[,i],1,0)) library(plyr) imm1New<-mutate(imm1,sum=rowSums(cbind(sp1,sp2,sp3))) Ext1New<-mutate(Ext1,sum=rowSums(cbind(sp1,sp2,sp3))) imm1New # sp1 sp2 sp3 sum #1 1 0 0 1 #2 0 0 1 1 #3 0 0 0 0 #4 1 1 1 3 Ext1New # sp1 sp2 sp3 sum #1 0 0 0 0 #2 1 0 0 1 #3 0 0 1 1 #4 0 0 0 0 #or imm2<-sapply(seq_len(ncol(speciesTime2New)),function(i) ifelse(speciesTime2New[,i]==1& speciesTime2New[,i]!=speciesTime1New[,i],1,0)) Ext2<-sapply(seq_len(ncol(speciesTime1New)),function(i) ifelse(speciesTime1New[,i]==1& speciesTime1New[,i]!=speciesTime2New[,i],1,0)) imm2$sum<-rowSums(imm2) Ext2<-as.data.frame(Ext2) Ext2$sum<-rowSums(Ext2) colnames(imm2)<-colnames(imm1New) colnames(Ext2)<-colnames(Ext1New) identical(imm2,imm1New) #[1] TRUE identical(Ext2,Ext1New) #[1] TRUE A.K. Hi R -Users I am sorry for bothering you. I was wondering what script can work to calculate an immigration and extinction from two tables (time 1 and time 2). I could easily calculate them in the Excel for small data set, but I have very big data set. so that I was wondering to use R for this calculation. But I could not figure it out to write these logical function in R. Would you provide me some hints? For example, I have these two tables speciesTime1<-structure(list(site = 1:4, sp1 = c(0L, 1L, 1L, 0L), sp2 = c(0L, 1L, 1L, 0L), sp3 = c(1L, 0L, 1L, 0L)), .Names = c("site", "sp1", "sp2", "sp3"), class = "data.frame", row.names = c(NA, -4L)) speciesTime2<-structure(list(site = 1:4, sp1 = c(1L, 0L, 1L, 1L), sp2 = c(0L, 1L, 1L, 1L), sp3 = c(1L, 1L, 0L, 1L)), .Names = c("site", "sp1", "sp2", "sp3"), class = "data.frame", row.names = c(NA, -4L)) >From these two tables: I wanted to make the following two tables (Imm and Exti] [Imm means number of "sp" present in speciesTime2, but not in speciesTime1] imm<-structure(list(sp1 = c(1L, 0L, 0L, 1L), sp2 = c(0L, 0L, 0L, 1L ), sp3 = c(0L, 1L, 0L, 1L), sum = c(1L, 1L, 0L, 3L)), .Names = c("sp1", "sp2", "sp3", "sum"), class = "data.frame", row.names = c(NA, -4L)) [Exti=number of "sp" absent in speciesTime2, but present in speciesTime1] Exti<-structure(list(sp1 = c(0L, 1L, 0L, 0L), sp2 = c(0L, 0L, 0L, 0L ), sp3 = c(0L, 0L, 1L, 0L), sum = c(0L, 1L, 1L, 0L)), .Names = c("sp1", "sp2", "sp3", "sum"), class = "data.frame", row.names = c(NA, -4L)) Thanks KG === ______________________________________________ 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. ______________________________________________ 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.