Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 对每个患者的变量进行首次观察_R_Dataset_Data Manipulation - Fatal编程技术网

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

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的“持续时间”进行第一次观察

我的数据集有3个变量:

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