我用ifelse过滤我的工作结果,我想做的就像下面的那样,
当j等于A或B或C时,k等于第一个,然后是变量15中的rbind。
当j等于D或E,k等于秒时,则在var30中执行rbind。
当j等于F,然后是var45中的rbind。
如何修改我的代码以实现我的需求?
# Below is what I've done.
for (j in c("A","B","C","D","E","F")){
for (k in c("first","second")){
# do something here.
ifelse(j== "A" | "B" | "C" & k== "first", var15<-rbind(var1, var2),var15<-rbind(var15,var1, var2))
ifelse(j== "D" | "E" & k== "second", var30<-rbind(var3,var4,var5),var30<-rbind(var30,var3,var4,var5))
ifelse(j== "F" , var45<-rbind(var3,var4),var45<-rbind(var45,var3,var4))
}
Get_all <- rbind(Get_all ,var15,var30,var45)
}
答案 0 :(得分:1)
%in%
将使用lhs与rhs匹配。由于lhs的长度在for循环中等于1,因此它将始终评估为长度为1的逻辑。
然后将k与第一个或第二个进行比较。由于lhs和rhs的长度相等,因此在将k与第一个或第二个进行比较时,==
将评估为长度为1的逻辑。然后将两个逻辑组合为&&
条件。
for (j in c("A","B","C","D","E","F")){
for (k in c("first","second")){
# do something here.
var15 <- ifelse( ( j %in% c( "A", "B", "C") && k == "first"), rbind(var1, var2), rbind(var15, var1, var2))
var30 <- ifelse( ( j %in% c( "D", "E") && k == "second"), rbind(var3, var4, var5), rbind(var30, var3, var4, var5))
var45 <- ifelse( j == "F" , rbind( var3, var4), rbind(var45, var3, var4))
}
Get_all <- do.call( 'rbind', list( var15,var30,var45))
}