我有2个输入列,例如Visit_start_date,Visit_type和一个输出列-Visit_end_date
我需要根据以下条件填写Visit_end_date列的值
如果visit_type列具有“门诊病人”或“紧急情况”之类的值,则visit_end_date与visit_start_date相同(相等)。如果不匹配,那么我可以从另一列(出库日期)中选择一些随机值
我已经尝试过此操作,但是很遗憾在visit_end_date列中获得了一个像'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')))}
我希望在visit_start_date和visit_end_date列中的输出均为“ 2169-06-08”。当前,在visit_start_date中为“ 2169-06-08”,在visit_end_date中为72842,如下面的屏幕快照所示。
请找到dput命令输出
structure(list(Admit_Date = c(“ 6/8/2169 9:40”,“ 6/8/2169 9: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” ),Discharge_Date = c(85466.75694,85466.75694,85466.75694, 85466.75694、85466.75694、85466.75694、85466.75694、85466.75694, 85466.75694、85466.75694),Discharge_Disposition = c(NA_character_, NA_character_,NA_character_,NA_character_,NA_character_,NA_character_, NA_character_,NA_character_,NA_character_,NA_character_), Enc_Type = c(“门诊病人”,“门诊病人”,“门诊病人”,“门诊病人”, “门诊”,“门诊”,“门诊”,“门诊”,“门诊”, “门诊”),服务= c(“ OVS /眼”,“ Med / DM”,“ Med / DM”, “ Med / Renal”,“ Med / DM”,“ Dental / Dent Surg”,“ Dental / Dent Surg”, “ Dental / Dental Surg”,“ OVS / Eye”,“ OVS / Eye”))),row.names = c(NA, -10L),class = c(“ tbl_df”,“ tbl”,“ data.frame”))
答案 0 :(得分:1)
这是我重新编写您的代码的方法。请注意,您无需在.$
内使用mutate
,只需使用列名即可。另外,您可以在一个mutate
中运行多个语句。
对于Date
类对象,ifelse
可以删除必要的属性。 dplyr::if_else
做得很好:
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
我无法测试,因为您没有提供示例输入。如果不起作用,请编辑您的问题,以包含与dput
共享的一些示例数据,例如dput(droplevels(DF[1:10, ]))
。然后,我可以对这些数据进行测试,并尝试找出问题所在。