在R中使用条件elseif语句但不起作用

在R中使用条件elseif语句但不起作用,r,if-statement,na,R,If Statement,Na,这是我第一次使用elseif。我希望创建一个新的专栏mobile$tenuredate(在几个月内),并试图找出我的代码产生NA值的问题 结果 mobile$status==“活动” 行为mobile$tenuredate提供NA值(不应为NA) mobile$status==“已停止” 行为mobile$tenuredate提供有效值 下面是代码 mobile$tenuredate=if(mobile$status==“stopped”){ 轮(不同时间(移动$EFFECTIVEDATE,

这是我第一次使用
elseif
。我希望创建一个新的专栏
mobile$tenuredate
(在几个月内),并试图找出我的代码产生NA值的问题

结果

mobile$status==“活动”
行为
mobile$tenuredate
提供NA值(不应为NA)

mobile$status==“已停止”
行为
mobile$tenuredate
提供有效值

下面是代码

mobile$tenuredate=if(mobile$status==“stopped”){
轮(不同时间(移动$EFFECTIVEDATE,移动$STARTDATE,units=“weeks”)/4.348125)
}否则如果((移动$status==“active”)&&(移动$difftemp>=0)){
轮(difftime(mobile$contracteddate,mobile$STARTDATE,units=“weeks”)/4.348125)
}否则{
轮(difftime(mobile$CUTOFFDATE,mobile$STARTDATE,units=“weeks”)/4.348125)
}

下面是一个示例数据帧

structure(list(STARTDATE = structure(c(11413, 11639, 11953, 12212, 
11335, 12050, 12142, 11225, 12176, 11386), class = "Date"), STOPDATE = structure(c(11436, 
12079, NA, 12225, 11345, 12124, 12226, 11999, 12176, 11758), class = "Date"), 
    EFFECTIVEDATE = structure(c(11436, 12079, NA, 12225, 11345, 
    12124, 12226, 11999, 12176, 11758), class = "Date"), CONTRACTENDDATE = structure(c(11778, 
    12004, 12318, 12578, 11700, 12415, 12508, 11977, 12542, 11751
    ), class = "Date"), CUTOFFDATE = structure(c(12273, 12273, 
    12273, 12273, 12273, 12273, 12273, 12273, 12273, 12273), class = "Date"), 
    status = c("stopped", "stopped", "active", "stopped", "stopped", 
    "stopped", "stopped", "stopped", "stopped", "stopped"), tenuredate = structure(c(1, 
    14, NA, 0, 0, 2, 3, 25, 0, 12), class = "difftime", units = "weeks")), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

提前感谢。

如果
要求其条件长度为1,而您提供的是向量。合乎逻辑的替换方法是使用
ifelse
,但是
ifelse
的一个众所周知的问题是它会删除类,因此您的
Date
difftime
列变为
numeric
,您必须重新编写它们。(这并不是世界末日,但让我们保持课堂现状。)


mobile$tenuredate没有查看您的数据(我现在不关注链接),虽然过于冗长,但我在您的代码中没有看到会引入
NA
s的内容。更可能的问题是如何读取数据,可能是基于对数据本身的假设。如果您使用
dput(head(mobile))
data.frame(…)
在问题中提供了一个数据示例,将会有所帮助。(dput
dput
的原因是它提供了R所看到的明确的数据,而不是你认为R是如何使用它的。)谢谢你的建议!使用
dput()
提供了上述示例数据。好的。(1)
如果
希望进行单例比较,则您提供了一个向量。矢量化方法是合适的。(2) 当然,
ifelse
是合乎逻辑的步骤,但它会让你失败,因为它会让你的
课程
,你会失去你的
日期
课程(尽管数学仍然会发生)。待命…非常感谢!这确实有助于解释,它解决了问题=),并感谢您提供各种方法,包括改进我的代码。