我有以下数据框:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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)
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
这可以通过以下方式完成ifelse:(假设dat是您的数据框)
within(dat, cat <- ifelse(id1 != id2, 2, qtty > 0))
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
功能ifelse检查是否id1和id2是相同的.如果是这种情况,则将值2分配给相应的条目cat.如果它们不相同,qtty > 0则分配结果.后者返回一个布尔(FALSE和TRUE)值的逻辑向量,这些值被转换为整数(0和1).