使用具有多个条件的ifelse编程R

使用具有多个条件的ifelse编程R,r,conditional-statements,R,Conditional Statements,A你能帮帮我吗 我有四列的data.frame E 我在R中只使用基本包 我不使用for-loop 我有几百万排 phone<-c(123,123,123,333,333,333,456,456,456,789,789,789,500,500,500,....etc) time<-c(2018-11-06,2018-11-06,2018-11-06,2018-11-09,2018-11-09,2018-11-09,2018-11-07,2018-11-07,2018-11-07,2

A你能帮帮我吗

我有四列的data.frame E 我在R中只使用基本包 我不使用for-loop 我有几百万排

 phone<-c(123,123,123,333,333,333,456,456,456,789,789,789,500,500,500,....etc) time<-c(2018-11-06,2018-11-06,2018-11-06,2018-11-09,2018-11-09,2018-11-09,2018-11-07,2018-11-07,2018-11-07,2018-11-05,2018-11-05,2018-11-05,2018-11-06,2018-11-06,2018-11-06...etc) 
    tel<-c(0,0,1,1,0,1,1,1,0,1,1,1,0,0,1,...etc)       
    porad<-c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3....etc)

phone通过将
ifelse
语句矢量化,可以避免循环或应用语句

如果将
i
定义为3:length(E$phone)的向量,则可以直接运行ifelse语句

#test data
phone<-c(123,123,123,333,333,333,456,456,456,789,789,789,500,500,500)
time<-c("2018-11-06","2018-11-06","2018-11-06","2018-11-09","2018-11-09","2018-11-09",
        "2018-11-07","2018-11-07","2018-11-07","2018-11-05","2018-11-05", "2018-11-05", 
        "2018-11-06","2018-11-06","2018-11-06")
time<-as.Date(time)
tel<-c(0,0,1,1,0,1,1,1,0,1,1,1,0,0,1)
porad<-c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
E<-data.frame(phone, time, tel, porad)

E$de[1]=ifelse(E$phone[1]==E$phone[2] & E$time[1]==E$time[2] & E$porad[1]==2 & E$tel[1]==1,1,0)
E$de[2]=ifelse(E$phone[2]==E$phone[3] & E$time[2]==E$time[3] & E$porad[2]==3 & E$tel[2]==1,1,0)

#vectorized ifelse statement
i<-3:length(E$phone)
E$de[i]<-ifelse(E$phone[i]==E$phone[i-2] & E$time[i]==E$time[i-2] & E$porad[i]==3 & E$tel[i]==1 & E$tel[i-1]==0 & E$tel[i-2]==0,1,0)
测试数据
电话此处向您提出了一些建议…您尝试过吗?这不是建议我知道这与两行类似,但我不知道添加第三行用于计算
E$de[1]=…
E$de[2]=…
对象
i
未定义。请让你的例子重现!您应该尝试使用“应用”函数来执行此操作。这些都是矢量化的,在R中速度很快。您是否尝试过在数据子集上运行代码,以确保它按预期工作?如果可能,请发布一个可以实际运行的最小示例,以演示您正在尝试做什么。
#test data
phone<-c(123,123,123,333,333,333,456,456,456,789,789,789,500,500,500)
time<-c("2018-11-06","2018-11-06","2018-11-06","2018-11-09","2018-11-09","2018-11-09",
        "2018-11-07","2018-11-07","2018-11-07","2018-11-05","2018-11-05", "2018-11-05", 
        "2018-11-06","2018-11-06","2018-11-06")
time<-as.Date(time)
tel<-c(0,0,1,1,0,1,1,1,0,1,1,1,0,0,1)
porad<-c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
E<-data.frame(phone, time, tel, porad)

E$de[1]=ifelse(E$phone[1]==E$phone[2] & E$time[1]==E$time[2] & E$porad[1]==2 & E$tel[1]==1,1,0)
E$de[2]=ifelse(E$phone[2]==E$phone[3] & E$time[2]==E$time[3] & E$porad[2]==3 & E$tel[2]==1,1,0)

#vectorized ifelse statement
i<-3:length(E$phone)
E$de[i]<-ifelse(E$phone[i]==E$phone[i-2] & E$time[i]==E$time[i-2] & E$porad[i]==3 & E$tel[i]==1 & E$tel[i-1]==0 & E$tel[i-2]==0,1,0)