对每位患者进行变量的首次观察

时间:2015-07-13 02:16:26

标签: r dataset data-manipulation

我的数据集有3个变量:

Patient ID    Outcome     Duration  
1               1          3
1               0          4
1               0          5
2               0          2
3               1          1
3               1          2

我想要的是对每个患者身份证的“持续时间”进行第一次观察。

也就是说,对于#1患者,我希望持续时间读取患者#3的3,3,3我希望持续时间为1,1。

3 个答案:

答案 0 :(得分:5)

这是data.table的一种方法。您取Duration中的第一个数字,并要求R为每个PatientID重复一次。

mydf <- read.table(text = "PatientID    Outcome     Duration  
1               1          3
1               0          4
1               0          5
2               0          2
3               1          1
3               1          2", header = T)

library(data.table)
setDT(mydf)[, Duration := Duration[1L], by = PatientID]
print(mydf)

#   PatientID Outcome Duration
#1:         1       1        3
#2:         1       0        3
#3:         1       0        3
#4:         2       0        2
#5:         3       1        1
#6:         3       1        1

答案 1 :(得分:2)

dplyr这是一个很好的工作(数据框架是邪恶的 - plyr更好的继承者,语法远比data.table好得多):

library(dplyr)

dat %>% 
  group_by(`Patient ID`) %>% 
  mutate(Duration=first(Duration))

## Source: local data frame [6 x 3]
## Groups: Patient ID
## 
##   Patient ID Outcome Duration
## 1          1       1        3
## 2          1       0        3
## 3          1       0        3
## 4          2       0        2
## 5          3       1        1
## 6          3       1        1

答案 2 :(得分:0)

另一种使用plyr的替代方案(如果您将对您的数据框进行大量操作,特别是如果它很大,我建议使用data.table。它的学习曲线更陡峭但是非常值得。)

library(plyr)
ddply(mydf, .(PatientID), transform, Duration=Duration[1])  PatientID 
# Outcome Duration
# 1         1       1        3
# 2         1       0        3
# 3         1       0        3
# 4         2       0        2
# 5         3       1        1
# 6         3       1        1