3つの日付列の不等式に基づいて0と1の列を作成したいとします。3つの日付列の不等式に基づいて0と1の列を作成する
考え方は次のとおりです。 event_date
がdeath_date
又はstudy_over
前であれば、カラムevent
は== 1であるべきであるevent_date
がdeath_date
又はstudy_over
後に発生した場合、event
は== 0 event_date
とdeath_date
両方は、NASを含むことができるなければなりません。
set.seed(1337)
rand_dates <- Sys.Date() - 365:1
df <-
data.frame(
event_date = sample(rand_dates, 20),
death_date = sample(rand_dates, 20),
study_over = sample(rand_dates, 20)
)
私の試みは、私はこれを行う方法を見つけ出すことはできません、次のよう
library(dplyr)
df[c(3, 5, 7), "event_date"] <- NA #there are some NA in .$event_date
df[c(3, 4, 6), "death_date"] <- NA #there are some NA in .$death_date
df %>%
mutate(event = sapply(.$event_date, eventR, y = .$death_date, z = .$study_over))
##Error: wrong result size (400), expected 20 or 1
##In addition: There were 40 warnings (use warnings() to see them)
でそれを使用し、次の
eventR <-
function(x, y, z){
if(is.na(y)){
ifelse(x <= z, 1, 0)
} else if(y <= z){
ifelse(x < y, 1, 0)
} else {
ifelse(x <= z, 1, 0)
}
}
ました。助言がありますか? else文であれば、多く扱うための代わりsapplyのpurrrパッケージからpmap_dbl()
を使用することはでき
あなたの説明は(私には)少し矛盾したようだ*「death_date前に**や** study_over」*その1、*は「** death_date後に発生しますまたは** study_over "*はゼロです。それはdeath_rateより前にあるかもしれないが、study_overの後である可能性はありますか?もしそうなら、どんな値をとるべきでしょうか。 – user20650
@ user20650それを関数にハードコードする方法を理解できませんでした。 df [is.na(event)、 "event"] < - 0のポストで修正されました。 – user6571411