R 对每个患者的变量进行首次观察
我的数据集有3个变量:R 对每个患者的变量进行首次观察,r,dataset,data-manipulation,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 我想要的是对每个患者ID的“持续时间”进行第一次观察
Patient ID Outcome Duration
1 1 3
1 0 4
1 0 5
2 0 2
3 1 1
3 1 2
我想要的是对每个患者ID的“持续时间”进行第一次观察
也就是说,对于患者#1,我希望持续时间读取3,3,3对于患者#3,我希望持续时间读取1,1。这里是data.table的一种方法。取
持续时间中的第一个数字
,并要求R为每个患者重复该数字
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
mydf使用plyr
的另一种选择(如果您要在数据帧上执行大量操作,尤其是在数据帧很大的情况下,我建议使用data.table
。它有一个更陡峭的学习曲线,但非常值得)
这对于dplyr
(data.frame是plyr
的更好继承者,其语法远远优于data.table
):
您的输出在第一行有(1,1,3)
,后面是(1,0,3)
。这里是否有输入错误,或者这是您希望代码执行的操作?@TimBiegeleisen我很困惑。你能澄清一下你的意思吗?我看到第一行的原始数据中有(1,1,3)
。@TimBiegeleisen如果我没有弄错的话,这就是OP要求的。很公平……我会投赞成票……我只希望这些问题能更清楚,但如果他们是,他们可能一开始不会这么问^^。我以为他只是想复制每个病人的第一行。@TimBiegeleisen不是打字错误,同一个病人在不同的时间重复观察。一些患者的就诊次数比其他患者多。dd$Duration
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
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