使用ifelse从另一个基于日期的列生成日期,并在R中进行变异

使用ifelse从另一个基于日期的列生成日期,并在R中进行变异,r,dplyr,timestamp,purrr,mutate,R,Dplyr,Timestamp,Purrr,Mutate,我有两个输入列,例如访问开始日期、访问类型和一个输出列-访问结束日期 我需要根据以下条件填写“就诊\结束\日期”列的值 如果就诊类型列的值为“门诊”或“急诊”,则就诊结束日期与就诊开始日期相同(相等)。如果它不匹配,那么我可以从另一列(出院日期)中选择一些随机值 我已经试过了,不幸的是,在访问结束日期列中得到了一个像“72842”这样的值。它必须是日期格式 请注意,数据框中的入院日期格式为“6/8/2169”,出院日期格式为“85466.75694” DF %>% mutate(visi

我有两个输入列,例如访问开始日期、访问类型和一个输出列-访问结束日期

我需要根据以下条件填写“就诊\结束\日期”列的值

如果就诊类型列的值为“门诊”或“急诊”,则就诊结束日期与就诊开始日期相同(相等)。如果它不匹配,那么我可以从另一列(出院日期)中选择一些随机值

我已经试过了,不幸的是,在访问结束日期列中得到了一个像“72842”这样的值。它必须是日期格式

请注意,数据框中的入院日期格式为“6/8/2169”,出院日期格式为“85466.75694”

DF %>% 
mutate(visit_start_date = as.Date(.$Admit_Date,format = "%m/%d/%Y")) %>%  #dates in raw file are in the format as specified in the code
mutate(visit_end_date = ifelse((.$Enc_Type == 'Outpatient'|.$Enc_Type == 'Emergency'),visit_start_date, as.Date(.$Discharge_Date,origin ='1970-01-01')))} 
我希望访问开始日期和访问结束日期列的输出都是“2169-06-08”。目前,访问开始日期为“2169-06-08”,访问结束日期为72842,如下面的屏幕截图所示

请查找dput命令输出

结构(列表(录取日期=c(“6/8/2169:40”、“6/8/2169:41”), "6/8/2169 9:42", "7/24/2169 8:51", "9/12/2169 10:30", "6/19/2237 12:15", "6/19/2237 12:15", "6/19/2237 12:15", "4/27/2238 14:07", "4/27/2238 14:07" ),出院日期=c(85466.75694,85466.75694,85466.75694, 85466.75694, 85466.75694, 85466.75694, 85466.75694, 85466.75694, 85466.75694,85466.75694),出院处置=c, NA_字符,NA_字符,NA_字符,NA_字符,NA_字符,NA_字符, NA_字符,NA_字符,NA_字符,NA_字符, Enc_Type=c(“门诊”、“门诊”、“门诊”、“门诊”, “门诊”、“门诊”、“门诊”、“门诊”、“门诊”, “门诊”),服务=c(“OVS/Eye”、“Med/DM”、“Med/DM”, “医学/肾脏”、“医学/糖尿病”、“牙科/牙科外科”、“牙科/牙科外科”, “牙科/牙科手术”、“OVS/眼睛”、“OVS/眼睛”)),行名称=c(NA, -10L),类=c(“待定”、“待定”、“数据帧”))


下面是我将如何重新编写您的代码。请注意,您不需要在
mutate
中使用
$
,只需使用列名即可。此外,您还可以在一个
mutate
中运行多个语句

使用
Date
类对象,
ifelse
可以删除必要的属性
dplyr::如果其他方面做得很好:

DF %>%
  #dates in raw file are in the format as specified in the code
  mutate(
    visit_start_date = as.Date(Admit_Date, format = "%m/%d/%Y"),
    Discharge_Date = as.Date(Discharge_Date, origin = '1970-01-01'),
    visit_end_date = if_else(
      Enc_Type %in% c('Outpatient', 'Emergency'),
      visit_start_date,
      Discharge_Date
    )
  )
# # A tibble: 10 x 7
#    Admit_Date    Discharge_Date Discharge_Disposit~ Enc_Type Service       visit_start_date visit_end_date
#    <chr>         <date>         <chr>               <chr>    <chr>         <date>           <date>
#  1 6/8/2169 9:40 2204-01-01     NA                  Outpati~ OVS / Eye     2169-06-08       2169-06-08
#  2 6/8/2169 9:41 2204-01-01     NA                  Outpati~ Med / DM      2169-06-08       2169-06-08
#  3 6/8/2169 9:42 2204-01-01     NA                  Outpati~ Med / DM      2169-06-08       2169-06-08
#  4 7/24/2169 8:~ 2204-01-01     NA                  Outpati~ Med / Renal   2169-07-24       2169-07-24
#  5 9/12/2169 10~ 2204-01-01     NA                  Outpati~ Med / DM      2169-09-12       2169-09-12
#  6 6/19/2237 12~ 2204-01-01     NA                  Outpati~ Dental / Den~ 2237-06-19       2237-06-19
#  7 6/19/2237 12~ 2204-01-01     NA                  Outpati~ Dental / Den~ 2237-06-19       2237-06-19
#  8 6/19/2237 12~ 2204-01-01     NA                  Outpati~ Dental / Den~ 2237-06-19       2237-06-19
#  9 4/27/2238 14~ 2204-01-01     NA                  Outpati~ OVS / Eye     2238-04-27       2238-04-27
# 10 4/27/2238 14~ 2204-01-01     NA                  Outpati~ OVS / Eye     2238-04-27       2238-04-27
DF%>%
#原始文件中的日期采用代码中指定的格式
变异(
访问开始日期=截止日期(接纳日期,格式=“%m/%d/%Y”),
出院日期=截止日期(出院日期,原产地='1970-01-01'),
访问结束日期=如果其他(
%c(“门诊”、“急诊”)中的附件类型%,
访问开始日期,
出院日期
)
)
##tibble:10 x 7
#入院日期出院日期出院处理~Enc类型服务就诊开始日期就诊结束日期
#                                                             
#1 6/8/2169:40 2204-01-01 NA输出~OVS/眼睛2169-06-08 2169-06-08
#2 6/8/2169 9:41 2204-01-01 NA Outpati~Med/DM 2169-06-08 2169-06-08
#3 6/8/2169 9:42 2204-01-01 NA Outpati~Med/DM 2169-06-08 2169-06-08
#4 7/24/2169 8:~2204-01-01 NA门诊~Med/Renal 2169-07-24 2169-07-24
#5 9/12/216910~2204-01-01 NA门诊~Med/DM 2169-09-12 2169-09-12
#6 6/19/2237 12~2204-01-01 NA Outpati~DETAL/Den~2237-06-19 2237-06-19
#7 6/19/2237 12~2204-01-01 NA Outpati~DETAL/Den~2237-06-19 2237-06-19
#8 6/19/2237 12~2204-01-01 NA Outpati~DETAL/Den~2237-06-19 2237-06-19
#9 4/27/2238 14~2204-01-01 NA输出~OVS/眼睛2238-04-27 2238-04-27
#10 4/27/2238 14~2204-01-01 NA输出~OVS/眼睛2238-04-27 2238-04-27

我无法对此进行测试,因为您没有提供示例输入。如果它不起作用,请编辑您的问题,以包括与
dput
共享的一些示例数据,例如
dput(液滴液位(DF[1:10,])
。然后,我可以测试这些数据,并尝试找出哪里出了问题。

您确定日期转换正确吗?你真的在看未来150-200年的数据吗?是的。这是故意这样做的。但是问题在于上面的代码,我在Visit\u end\u date中没有得到相同的值,我仍然得到了问题中提到的意外输出。将尝试上载示例数据问题显然是
ifelse
。它似乎删除了日期属性。如果我们切换到
dplyr::If_else
它可以工作。请帮我写这篇文章好吗?