[英]applying more than one condition to different columns of a data frame
我有以下数据框:
id1 id2 qtty cat output
15994 15994 30 1 1
25787 26275 7 2 1
122301 122301 0 0 0
36199 35333 14 2 1
36199 36199 15 1 1
46223 45746 14 2 1
46223 46223 15 1 1
80570 80570 0 0 0
55728 55728 1 1 1
94218 94218 0 0 0
69456 66837 5 2 1
其中cat
是要根据以下条件生成的列:
id1=id2 and qtty=0 then cat=0
id1=id2 and qtty>0 then cat=1
id1!=id2 and qtty=0 then cat=2
id1!=id2 and qtty>0 then cat=2
output
就是我得到的,我所做的是:
status<-function(dataframe){
store<-rep(0,length(dataframe[,1]))
for(i in 1: length(dataframe[,1])) {
if(dataframe[i,1]==dataframe[i,2]) {
if(dataframe[i,3]==0) {store[i]<-0}
else
if(dataframe[i,1]==dataframe[i,2]) {
if(dataframe[i,3]>0) {store[i]<-1}
else
if(dataframe[i,1]!=dataframe[i,2]) {
if(dataframe[i,3]>0) {store[i]<-2}
else store[i]<-2
}
}
}
}
return(store)
}
任何帮助将不胜感激。
这可以通过ifelse
来完成:(假设dat
是您的数据框)
within(dat, cat <- ifelse(id1 != id2, 2, qtty > 0))
结果:
id1 id2 qtty cat output
1 15994 15994 30 1 1
2 25787 26275 7 2 1
3 122301 122301 0 0 0
4 36199 35333 14 2 1
5 36199 36199 15 1 1
6 46223 45746 14 2 1
7 46223 46223 15 1 1
8 80570 80570 0 0 0
9 55728 55728 1 1 1
10 94218 94218 0 0 0
11 69456 66837 5 2 1
这个怎么运作:
ifelse
函数检查id1
和id2
是否相同。 在这种情况下,将值2
分配给cat
相应条目。 如果它们不相同,则分配qtty > 0
的结果。 后者返回布尔值( FALSE
和TRUE
)的逻辑向量,该值转换为整数( 0
和1
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.