在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(…)
在问题中提供了一个数据示例,将会有所帮助。(dputdput
的原因是它提供了R所看到的明确的数据,而不是你认为R是如何使用它的。)谢谢你的建议!使用dput()
提供了上述示例数据。好的。(1) 如果
希望进行单例比较,则您提供了一个向量。矢量化方法是合适的。(2) 当然,ifelse
是合乎逻辑的步骤,但它会让你失败,因为它会让你的课程
,你会失去你的日期
课程(尽管数学仍然会发生)。待命…非常感谢!这确实有助于解释,它解决了问题=),并感谢您提供各种方法,包括改进我的代码。