【发布时间】:2020-07-11 20:09:07
【问题描述】:
更新以在新变量中包含多个选项:
我正在处理一个凌乱的大数据患者文件(> 4000 万行)。每个患者 (id) 有几行。每行(大致)代表一个带有症状/疾病代码的咨询 (icpc)。我添加了一个新列,其中包含特定条件患者的类别(基于列 icpc 和 icpc2)。
我的原始 data.frame (df) 看起来像这样(这是捏造的数据,id 在我的数据集中更长,我省略了我喜欢删除的不相关列):
id icpc icpc2 reg.date
1: 123 D95 F15 19JUN2015
2: 123 F85 15AUG2016
3: 332 A01 16MAR2010
4: 332 A04 20JAN2018
5: 332 K20 20FEB2017
6: 100 B10 01JUN2017
7: 100 A04 11JAN2008
8: 113 T08 18MAR2018
9: 113 P28 19JAN2017
10: 113 D95 A01 16JAN2013
11: 113 A04 01MAY2009
12: 551 B12 A01 03APR2011
13: 551 D95 09MAY2015
假设我想在名为“condit”的新列中将D95 和/或A01 的患者分类为“是”(基于icpc 和icpc2 两列)。以下作品:
cond1 <- c("D95", "A01")
setDT(df)[, condit := ifelse(any(icpc %in% cond1 | icpc2 %in% cond1), "yes","no"), by=id]
df
但现在我想将icpc 和icpc2 中的几个代码分类到新列condit 中。例如,来自icpc 或icpc2 的D95 和/或A01 为A,A04 和/或T08 为B,B10 为C 中的condit。注意:A 应该覆盖 B(参见第 4、8 和 11 行),B 应该覆盖 C 等(因为可能 id 可能属于多个类别)。
这是我想要的 data.frame (df):
id icpc icpc2 reg.date condit
1: 123 D95 F15 19JUN2015 A
2: 123 F85 15AUG2016 A
3: 332 A01 16MAR2010 A
4: 332 A04 20JAN2018 A
5: 332 K20 20FEB2017 A
6: 100 B10 01JUN2017 C
7: 100 A04 11JAN2008 C
8: 113 T08 18MAR2018 A
9: 113 P28 19JAN2017 A
10: 113 D95 A01 16JAN2013 A
11: 113 A04 01MAY2009 A
12: 551 B12 A01 03APR2011 A
13: 551 D90 09MAY2015 A
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
添加 'any' 有点帮助... 'if_else(any(icpc %in% c("D95", "A01"), 'yes', 'no'))' not with OR功能
-
这不是完整的答案,它不允许 R 在两列(icpc 和 icpc2)中找到 A01 或 D95
-
本次响应者已为您完成,但请在以后发布时按照r标签页面顶部的说明进行操作。
标签: r if-statement data.table bigdata grouping