我有一個資料集如下:
mydata <- read.table(header=TRUE, text="
Id DAYS QS Event
01 70 1 1
01 78 2 1
01 85 3 1
02 92 4 1
02 98 5 1
02 105 6 1
02 106 7 0
")
我想用DAYS列來創建start和end列如下:
mydata <- read.table(header=TRUE, text="
Id start end QS Event
01 0 70 1 1
01 70 78 2 1
01 78 85 3 1
02 0 92 4 1
02 92 98 5 1
02 98 105 6 1
02 105 106 7 0
")
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
你可以用
library(dplyr)
mydata %>%
group_by(Id) %>%
mutate(start = lag(DAYS, default = 0)) %>%
select(Id, start, end = DAYS, QS, Event) %>%
ungroup()
這回傳
# A tibble: 7 x 5
Id start end QS Event
<int> <dbl> <int> <int> <int>
1 1 0 70 1 1
2 1 70 78 2 1
3 1 78 85 3 1
4 2 0 92 4 1
5 2 92 98 5 1
6 2 98 105 6 1
7 2 105 106 7 0
uj5u.com熱心網友回復:
這是一個基本的 R 方式ave。
mydata$start <- with(mydata, ave(DAYS, Id, FUN = \(x) c(0, head(x, -1))))
mydata <- mydata[c(1, 5, 2:4)]
然后,更改 column 的名稱DAYS。
names(mydata)[3] <- "end"
mydata
# Id start end QS Event
#1 1 0 70 1 1
#2 1 70 78 2 1
#3 1 78 85 3 1
#4 2 0 92 4 1
#5 2 92 98 5 1
#6 2 98 105 6 1
#7 2 105 106 7 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/328191.html
上一篇:計算組id中列的某些值
