[R] How can I write logical function in R?

David Carlson dcarlson at tamu.edu
Fri May 31 19:56:19 CEST 2013


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-bounces at r-project.org [mailto:r-help-bounces at 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 at 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.



More information about the R-help mailing list