[英]R: Add new rows to a dataframe when a condition is met and then repeat the final value
我有一個 dataframe 重復測量個人
ID Day Value
1 1 1
1 3 NA
1 4 3
1 5 5
在受試者達到某個值(5 或 0.5)后,它們會從數據集中消失。 但是,我想為這些患者添加行並重復最后一個值,直到第 60 天
預期 output:
ID Day Value
1 1 1
1 3 NA
1 4 3
1 5 5
1 6 5
1 7 5
1 ... 5
1 60 5
有很多科目,每個科目都需要發生同樣的事情,所以當 value = 5 時,重復 5 到第 60 天 當 value = 0.5 時,重復 0.5 到第 60 天
一些受試者在 1 天后達到 5 或 0.5,另一些在 59 天后達到 5 或 0.5,介於兩者之間。 還有很多缺失值,如果它們在主題達到 5 或 0.5 之前,它們需要保持 NA。
我不知道如何做到這一點,我一直在網上尋找但找不到這個問題,如果它是重復的,請道歉。
如果有什么不清楚的,請告訴我,謝謝!
使用末尾注釋中的可重現數據,其中nday
表示我們想要的天數——我們在這里使用 7,但您可以將其更改為 60。創建一個 function 執行一個 ID 的計算。 然后將其應用於每個 ID 並將結果 rbind 在一起。 請注意,如果mx
已經等於nday
,那么由於if
上沒有else
腿, more
的值將是 NULL 和rbind
與 NULL 只是根據需要返回數據。 不使用任何包。
add_data <- function(data) {
mx = max(data$Day)
more <- if (mx < nday) {
with(data, data.frame(ID = ID[1], Day = seq(mx+1, nday), Value = tail(Value, 1)))
}
rbind(data, more)
}
do.call("rbind", by(DF, DF$ID, add_data))
給予:
ID Day Value
1.1 1 1 1
1.2 1 3 NA
1.3 1 4 3
1.4 1 5 5
1.5 1 6 5
1.6 1 7 5
2.5 2 1 1
2.6 2 3 NA
2.7 2 4 3
2.8 2 5 5
2.1 2 6 5
2.2 2 7 5
DF <- data.frame(ID = rep(1:2, c(4, 4)), Day = c(1, 3, 4, 5), Value = c(1, NA, 3, 5))
nday <- 7 # number of days up to which we need; replace with 60
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.