【问题标题】:Select all rows based on conditions in two columns in R (multiple cases per row)根据R中两列中的条件选择所有行(每行多个案例)
【发布时间】:2020-07-11 04:58:51
【问题描述】:

好的,我是初学者,在充分表达我的问题时遇到问题,所以如果我能在其他地方找到答案,请重定向我并原谅我 :)

我正在处理一个凌乱的大数据患者文件(> 4000 万行)。每个患者 (id) 有几行。每行(大致)代表一个带有症状/疾病代码(icpc)的咨询。我想在他们的一个咨询/行中将数据集减少到具有特定条件 (icpc) 的所有患者行,但也为这些患者保留所有具有其他条件的行。我还想保留 reg.date 列。

我的原始 data.frame (x) 看起来像这样(这是捏造的数据,id 在我的数据集中更长,我遗漏了我喜欢删除的不相关列):

id icpc reg.date
123 D95 19JUN2015
123 F85 15AUG2016
332 A01 16MAR2010
332 A04 20JAN2018
332 K20 20FEB2017
100 B10 01JUN2017
100 A04 11JAN2008
113 T08 18MAR2018
113 P28 19JAN2017
113 D95 16JAN2013
113 A01 01MAY2009
551 B12 03APR2011
551 D95 09MAY2015

假设我只想将 D95 和/或 A01 的患者保留在数据集中。我已经管理了子集:

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

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: r dataframe conditional-statements bigdata subset


    【解决方案1】:

    使用base,因为您指定了subset

    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
    

    使用dplyr - 在我看来更容易,但使用filter 而不是subset

    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
    

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多