首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据两个具有特定标准的现有表创建新表

根据两个具有特定标准的现有表创建新表
EN

Stack Overflow用户
提问于 2016-04-15 17:20:07
回答 1查看 1.6K关注 0票数 0

这可能很愚蠢,但我有以下问题:我有两个表:

(1)对某一特定患者进行治疗,包括开始日期和结束日期:

代码语言:javascript
运行
复制
  therapyID patientID startoftherapy endoftherapy
1          1       233         5.5.10       6.6.11
2          2       233         7.7.11       8.8.11
3          3       344         1.1.09       3.2.10
4          4       344         3.3.10     10.10.11
5          5       544         2.1.09       3.2.10
6          6       544         4.3.12       4.3.14
7          7       113         1.1.12       1.1.15
8          8       123         2.1.13       1.1.15
9          9       543         2.1.09       3.2.10
10        10       533         7.7.11       8.8.14

2)列有许多诊断、具体病人、日期和描述的表格:

代码语言:javascript
运行
复制
 diagnosisID dateofdiagnosis patientID diagnosis
1          11          8.8.10       233       xxx
2          22         5.10.11       233       yyy
3          33          8.9.11       233       xxx
4          44          2.2.09       344       zzz
5          55          3.3.09       344       yyy
6         666          2.2.12       123       zzz
7         777          3.3.12       123       yyy
8         555          3.2.10       543       xxx
9         203          8.8.12       533       zzz

我想建立一个新的表格,与病人的诊断在他们的治疗时间,即与匹配的标准: patientID,开始治疗和治疗之间的日期。就像这样:

代码语言:javascript
运行
复制
therapyID diagnosisID patientID dateofdiagnosis diagnosis
1         1          11       233        08.08.10       xxx
2         2          22       233        05.10.11       yyy
3         2          33       233        08.09.11       xxx

我是一个没有经验的人来做这件事,有人能帮我做这件事或者指点我正确的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 17:32:29

我们可以用` `plyr:

代码语言:javascript
运行
复制
# We recreate your data.frames
df1 <- read.table(text="
therapyID patientID startoftherapy endoftherapy
1          1       233         5.5.10       6.6.11
2          2       233         7.7.11       8.8.11
3          3       344         1.1.09       3.2.10
4          4       344         3.3.10     10.10.11
5          5       544         2.1.09       3.2.10
6          6       544         4.3.12       4.3.14
7          7       113         1.1.12       1.1.15
8          8       123         2.1.13       1.1.15
9          9       543         2.1.09       3.2.10
10        10       533         7.7.11       8.8.14", h=T)

df2 <- read.table(text="
diagnosisID dateofdiagnosis patientID diagnosis
1          11          8.8.10       233       xxx
2          22         5.10.11       233       yyy
3          33          8.9.11       233       xxx
4          44          2.2.09       344       zzz
5          55          3.3.09       344       yyy
6         666          2.2.12       123       zzz
7         777          3.3.12       123       yyy
8         555          3.2.10       543       xxx
9         203          8.8.12       533       zzz", h=T)

如果您没有dplyrinstall.packages("dplyr"),我们将加载它。

代码语言:javascript
运行
复制
    library(dplyr)

然后我们通过left_join patientID。可以找到一个图形定义(以及更多的) 这里。然后我们重新排列列顺序。

代码语言:javascript
运行
复制
# we first left_join 
    left_join(df1, df2, "patientID") %>% 
      select(therapyID,diagnosisID,patientID, dateofdiagnosis, diagnosis) %>% 
      arrange(therapyID)

我们获得:

代码语言:javascript
运行
复制
therapyID diagnosisID patientID dateofdiagnosis diagnosis
1          1          11       233          8.8.10       xxx
2          1          22       233         5.10.11       yyy
3          1          33       233          8.9.11       xxx
4          2          11       233          8.8.10       xxx

由于行顺序,输出可能与您提供的输出不同。它可以用arrange来改变。这是你想要的吗?

编辑

我想找出在治疗过程中没有出现诊断日期的病例。

然后,首先需要正确地将时间列转换为日期格式。此函数为您的格式执行以下工作:

代码语言:javascript
运行
复制
ch2date <- function(x) as.Date(x, format="%d.%m.%y")

我们可以将它包含到管道中,然后使用这些列进行过滤:

代码语言:javascript
运行
复制
left_join(df1, df2, "patientID") %>% 
  mutate(startoftherapy  = ch2date(startoftherapy),
         endoftherapy    = ch2date(endoftherapy),
         dateofdiagnosis = ch2date(dateofdiagnosis)) %>% 
  filter(startoftherapy < dateofdiagnosis, dateofdiagnosis < endoftherapy) %>% 
  select(therapyID, diagnosisID, patientID, dateofdiagnosis, diagnosis) %>% 
  arrange(therapyID)

它能解决你的问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36653248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档