gpt4 book ai didi

r - 将两个日期向量与 R 中的函数进行比较以避免循环和处理 NA

转载 作者:行者123 更新时间:2023-12-01 03:59:17 25 4
gpt4 key购买 nike

对此可能有一个非常简单的解决方法,但这里是...我正在尝试将 R 中的两个日期向量(最初不是作为日期向量输入)进行比较:如果第二个是 NA 而第一个不是,则返回第一个值丢失的;如果第二个没有丢失,则返回两个日期中最大的一个;或者如果两个值都丢失则返回 NA。例如,对于下面显示的数据,我想要 lastdate计算如下:

v1        v2         lastdate
1/2/2006 NA 1/2/2006
1/2/2006 12/2/2006 12/2/2006
NA NA NA

我编写了一个公式来避免循环遍历每一行(这些数据中为 85K),如下所示:
lastdate <- function(lastdate1,lastdate2){
if (is.na(lastdate1)==T & is.na(lastdate2)==T) {NA}
else if (is.na(lastdate2)==T & !is.na(lastdate1)) {as.Date(lastdate1,format="%m/%d/%Y")}
else {max(as.Date(lastdate2,format="%m/%d/%Y"),as.Date(lastdate1,format="%m/%d/%Y"))}
}
dfbobs$leaveobsdate <- lastdate(as.Date(dfbobs$leavedate1,format="%m/%d/%Y"),as.Date(dfbobs$leavedate2,format="%m/%d/%Y"))

最后一行告诉它比较两个日期向量,但不太正确,因为我收到了错误
Warning messages:
1: In if (is.na(lastdate1) == T & is.na(lastdate2) == T) { :
the condition has length > 1 and only the first element will be used
2: In if (is.na(lastdate2) == T & !is.na(lastdate1)) { :
the condition has length > 1 and only the first element will be used

我敢肯定这很愚蠢,并且可能有更简单的方法来做到这一点,但任何帮助将不胜感激。

编辑:我现在尝试使用 ifelse 函数来处理向量,如建议的那样,但是如果我输入单个值(例如,lastdate("1/1/2006","1/2/2006")),如果我在数据帧向量上尝试它会产生 NA。代码如下:
lastdate <- function(lastdate1,lastdate2){
ifelse(is.na(lastdate1==T) & is.na(lastdate2==T), NA,
ifelse(is.na(lastdate2)==T & !is.na(lastdate1), as.Date(lastdate1,format="%m/%d/%Y"),
ifelse(!is.na(lastdate2) & !is.na(lastdate1), max(as.Date(lastdate2,format="%m/%d/%Y"),as.Date(lastdate1,format="%m/%d/%Y")),NA)))
}
dfbobs$leaveobsdate <- as.Date(lastdate(as.Date(dfbobs$leavedate1,format="%m/%d/%Y"),as.Date(dfbobs$leavedate2,format="%m/%d/%Y")),origin="1970-01-01")

最佳答案

尝试这个:

像这样将日期转换为数字形式

v1<-as.character(v1); v2<-as.character(v2);
v1<-as.numeric(strftime(strptime(v1,"%m/%d/%Y"),"%Y%m%d"));
v2<-as.numeric(strftime(strptime(v2,"%m/%d/%Y"),"%Y%m%d"));

现在计算结果
result<-ifelse(!is.na(v1) | !is.na(v2),max(v1,v2,na.rm=TRUE),NA);

转换回您选择的格式
result<-strptime(result,"%Y%m%d");
result<-strftime(result,"%m/%d/%Y");

关于r - 将两个日期向量与 R 中的函数进行比较以避免循环和处理 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14594827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com