在这个论坛中,我找到了一种很好的方法,可以在R中对行进行逐行计算,然后将其存储在新创建的列中(c3)。
在下面提供的代码中,嵌套的ifelse()语句以三个级别(a1范围从1到3)为例进行说明。
a1 <- 1 # variable 1; for this example it's either 1 or not.
a2 <- 2 # range: up to 10 values (e.g. for this example 1:10)
c1 <- c(1:6) # column 1 as sample data set
c2 <- c(11:16) # column 2 as sample data set
# column 3 calculated based on row wise operations
c3 <- ifelse(a1==1 & a2==1,1,ifelse(a1==1 & a2==2,2,ifelse(a1==1 & a2==3,3,4)))
r <- t(rbind(c1,c2,c3))
r
现在我需要ifelse()
语句嵌套10(!)次(至少)。像
ifelse(a1 == 1 & a2 ==1,,ifelse(a1 == 1 & a2 ==2,,ifelse(a1 == 1 & a2 ==3,,ifelse(a1 == 1 & a2 ==4,,ifelse(a1 == 1 & a2 ==5,,ifelse(a1 == 1 & a2 ==6,,ifelse(a1 == 1 & a2 ==7,,ifelse(a1 == 1 & a2 ==8,,ifelse(a1 == 1 & a2 ==9,,)))))))))
虽然这样的嵌套ifelse()
语句可能适用于2或3级,但我想知道是否有更高效(性能更快)的方法来执行这10个嵌套的行式操作。
我可以补充一下:根据嵌套的级别,必须进行不同的计算。因此,例如(1)在现实生活中看起来更像(2)。
(1) ifelse(a1==1 & a2==1,1, etc)
(2) ifelse(a1==1 & a2==1,variable1*(1+variable2 /variable3), etc)
系统:Mac OS X Mavericks,RStudio:R版本3.1.1(2014-07-10)
答案 0 :(得分:1)
创建一个查找表:
lookup=data.frame(a=rep(1:2, 2), b=rep(1:2, each=2), value=1:4)
c3 = with(lookup, lookup[a==a1 & b==a2,]$value)
cbind(c1,c2,c3)