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

Posted

技术标签:

【中文标题】使用具有多个条件的 ifelse 编程 R【英文标题】:programming R using ifelse with multiple conditions 【发布时间】:2019-05-06 01:17:27 【问题描述】:

你帮帮我。

我有四列 data.frame E 我在 R 中只使用基本包 我不使用 for- 循环 我有一百万行

 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)

我想创建带有结果的新列

E$de

所以我使用了循环,这个过程大概运行了 4 个小时。

E$de[1]=ifelse(E$phone[i]==E$phone[i+1] & E$time[i]==E$time[i+1] & E$porad[1]==2 & E$tel[1]==1,1,0)
E$de[2]=ifelse(E$phone[i]==E$phone[i+1] & E$time[i]==E$time[i+1] & E$porad[2]==3 & E$tel[2]==1,1,0)
for (i in 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)

请帮帮我:D

【问题讨论】:

这里有一些建议给你***.com/questions/53612935/programming-r-ifelse-loop ...你试过了吗? 这不是建议 我知道这与 2 行类似,但我不知道添加第三行 对于计算 E$de[1]=...E$de[2]=... 对象 i 未定义。请让您的示例可重现! 您应该尝试使用“应用”函数来执行此操作。这些在 R 中是矢量化且快速的。您是否尝试在数据子集上运行代码以确保其按预期工作?如果可能,请发布一个可以实际运行的最小示例来演示您正在尝试做什么。 【参考方案1】:

您可以通过向量化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)

这应该比 for 循环快大约 1000 倍。

【讨论】:

以上是关于使用具有多个条件的 ifelse 编程 R的主要内容,如果未能解决你的问题,请参考以下文章

shell编程-语句

R mutate ifelse更新带有计算函数值的条件行

如何使用spring webflux在功能性反应java中编写具有多个if else的复杂代码

如何使用R中的if或ifelse函数使用两个条件创建新值[关闭]

R语言IfElse条件语句实战

r R ifelse()中的条件语句