簡體   English   中英

R:在滿足條件時將新行添加到 dataframe,然后重復最終值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM