![](/img/trans.png)
[英]Issues creating an if else statement for rounding with a loop in R
[英]Creating a new field with if else statement R
我正在嘗試基於 if else 語句創建一個新字段。 基本上,我有一個“日期”字段和一個“估計日期”字段。 我想創建一個新字段來計算單個事件與日期或估計日期字段(如果日期為 NA)之間的差異(天):
data <- data.frame("DOD" = c("2020-11-09","2020-01-01","2020-11-19",NA), "DOD.est" = c(NA,NA,NA,"2020-02-09"), "event" = c("Thing1","Thing2","Thing3","Thing4"),"eventDate" = c("2019-02-19","2017-08-09",NA,"2019-12-09"))
data$DOD <- as.Date(data$DOD, "%Y-%m-%d")
data$DOD.est <- as.Date(data$DOD.est, "%Y-%m-%d")
data$eventDate <- as.Date(data$eventDate, "%Y-%m-%d")
# If DOD not NA, calculate diff using DOD. If DOD NA and DOD.est is not NA, use DOD.est to calculate diff
if (!is.na(data$DOD)) {
data$event_to_death <- as.numeric(data$DOD - data$eventDate)
} else if (is.na(data$DOD) & !is.na(data$DOD.est)) {
data$event_to_death <- as.numeric(data$DOD.est - data$eventDate)
}
我的結果:
DOD DOD.est event eventDate event_to_death
2020-11-09 NA Thing1 2019-02-19 629
2020-01-01 NA Thing2 2017-08-09 875
2020-11-19 NA Thing3 NA NA
NA 2020-02-09 Thing4 2019-12-09 NA
對於最后一行,我希望 event_to_death 進行計算,因為 DOD 是 NA 而 DOD.est 不是 NA。 我究竟做錯了什么? 謝謝。
您可以嘗試使用矢量化的ifelse()
。 函數if()
適用於單個值,並且在處理變量時可能會引發問題。 在這種情況下最好使用ifelse
。 這里的代碼作為您的選項:
#Code
data$event_to_death <- ifelse(!is.na(data$DOD),as.numeric(data$DOD - data$eventDate),
ifelse(is.na(data$DOD) & !is.na(data$DOD.est),
as.numeric(data$DOD.est - data$eventDate),NA))
輸出:
data
DOD DOD.est event eventDate event_to_death
1 2020-11-09 <NA> Thing1 2019-02-19 629
2 2020-01-01 <NA> Thing2 2017-08-09 875
3 2020-11-19 <NA> Thing3 <NA> NA
4 <NA> 2020-02-09 Thing4 2019-12-09 62
為了使您的解決方案工作,您需要告訴if()
需要在值級別(每行)評估條件,因為如果找到向量,則該函數僅用於評估某些值的條件。 您將需要一個循環:
#Variable
data$event_to_death <- NA
#Loop
for(i in 1:nrow(data))
{
if (!is.na(data$DOD[i])) {
data$event_to_death[i] <- as.numeric(data$DOD[i] - data$eventDate[i])
} else if (is.na(data$DOD[i]) & !is.na(data$DOD.est[i])) {
data$event_to_death[i] <- as.numeric(data$DOD.est[i] - data$eventDate[i])
}
}
輸出:
data
DOD DOD.est event eventDate event_to_death
1 2020-11-09 <NA> Thing1 2019-02-19 629
2 2020-01-01 <NA> Thing2 2017-08-09 875
3 2020-11-19 <NA> Thing3 <NA> NA
4 <NA> 2020-02-09 Thing4 2019-12-09 62
這樣,條件由每個值評估,並且if()
正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.