根据R中两列中的条件选择所有行(每行多个案例)
好的,我是一名初学者,在充分阐述我的问题时遇到问题,因此如果我能在其他地方找到答案,请重定向我,并原谅我:) 我正在处理一个凌乱的大数据患者文件(>4000万行)。每个患者(id)有几行。每行(大致)代表一次症状/疾病代码(icpc)咨询。我想将数据集减少到其中一个会诊/行中具有特定条件(icpc)的所有患者行,但同时保留这些患者具有其他条件的所有行。我还想保留reg.date列 我的raw data.frame(x)看起来像这样(这是捏造的数据,id在我的数据集中要长得多,我省略了我喜欢删除的无关列): 假设我只想在数据集中保留D95和/或A01患者。我已经管理过子集:根据R中两列中的条件选择所有行(每行多个案例),r,dataframe,conditional-statements,bigdata,subset,R,Dataframe,Conditional Statements,Bigdata,Subset,好的,我是一名初学者,在充分阐述我的问题时遇到问题,因此如果我能在其他地方找到答案,请重定向我,并原谅我:) 我正在处理一个凌乱的大数据患者文件(>4000万行)。每个患者(id)有几行。每行(大致)代表一次症状/疾病代码(icpc)咨询。我想将数据集减少到其中一个会诊/行中具有特定条件(icpc)的所有患者行,但同时保留这些患者具有其他条件的所有行。我还想保留reg.date列 我的raw data.frame(x)看起来像这样(这是捏造的数据,id在我的数据集中要长得多,我省略了我喜欢删除的
subset(x, ICPC == c("D95", "A01"))
但这让我只能在D95和A01注册的地方进行咨询:
id icpc reg.date
123 D95 19JUN2015
332 A01 16MAR2010
113 D95 16JAN2013
113 A01 01MAY2009
551 D95 09MAY2015
这是我想要的data.frame:
id icpc reg.date
123 D95 19JUN2015
123 F85 15AUG2016
332 A01 16MAR2010
332 A04 20JAN2018
332 K20 20FEB2017
113 T08 18MAR2018
113 P28 19JAN2017
113 D95 16JAN2013
113 A01 01MAY2009
551 B12 03APR2011
551 D95 09MAY2015
任何帮助都将不胜感激。谢谢大家! 使用
base
,因为您指定了子集
df_2 <- by(df, df$id, function(x) subset(x, any(x$icpc %in% c("D95", "A01"))))
df_2 <- do.call(rbind, lapply(df_2, data.frame))
row.names(df_2) <- NULL
id icpc reg.date
1 113 T08 18MAR2018
2 113 P28 19JAN2017
3 113 D95 16JAN2013
4 113 A01 01MAY2009
5 123 D95 19JUN2015
6 123 F85 15AUG2016
7 332 A01 16MAR2010
8 332 A04 20JAN2018
9 332 K20 20FEB2017
10 551 B12 03APR2011
11 551 D95 09MAY2015
library(dplyr)
df %>%
group_by(id) %>%
filter(any(icpc %in% c("D95", "A01")))
id icpc reg.date
<dbl> <chr> <chr>
1 123 D95 19JUN2015
2 123 F85 15AUG2016
3 332 A01 16MAR2010
4 332 A04 20JAN2018
5 332 K20 20FEB2017
6 113 T08 18MAR2018
7 113 P28 19JAN2017
8 113 D95 16JAN2013
9 113 A01 01MAY2009
10 551 B12 03APR2011
11 551 D95 09MAY2015
library(dplyr)
df %>%
group_by(id) %>%
filter(any(icpc %in% c("D95", "A01")))
id icpc reg.date
<dbl> <chr> <chr>
1 123 D95 19JUN2015
2 123 F85 15AUG2016
3 332 A01 16MAR2010
4 332 A04 20JAN2018
5 332 K20 20FEB2017
6 113 T08 18MAR2018
7 113 P28 19JAN2017
8 113 D95 16JAN2013
9 113 A01 01MAY2009
10 551 B12 03APR2011
11 551 D95 09MAY2015