【问题标题】:Filter by group project according selected variables [duplicate]根据所选变量按组项目过滤[重复]
【发布时间】:2018-06-11 04:49:57
【问题描述】:

我有一个数据

subject <- c(1,1,1,2,2,3,3,3)
day <- c(1,2,3,1,2,1,2,3)
RRT <- c(0,0,1,1,0,0,1,1)
SOFA <- c(8,9,2,10,12,11,19,8)
libo <- data.frame(subject,day,RRT,SOFA)

我只想从第 1 天 RRT = 0 的患者中选择数据。 我想要的输出是

subject <- c(1,1,1,3,3,3)
day <- c(1,2,3,1,2,3)
RRT <- c(0,0,1,0,1,1)
SOFA <- c(8,9,2,11,19,8)
libodesired <- data.frame(subject,day,RRT, SOFA)

如何在不从长格式更改为宽格式的情况下执行它? dplyr 可以吗?

【问题讨论】:

标签: r


【解决方案1】:

你可以使用双subset:

subset(libo, 
       subject %in% subset(libo, RRT == 0 & day == 1)$subject)

  subject day RRT SOFA
1       1   1   0    8
2       1   2   0    9
3       1   3   1    2
6       3   1   0   11
7       3   2   1   19
8       3   3   1    8
  • 根据RRTday(subset(libo, RRT == 0 &amp; day == 1)$subject)选择subjects
  • 根据所选主题的子集数据框subset(libo %in% SUBJECTS)

【讨论】:

    【解决方案2】:

    使用tidyversedplyr,您可以根据您的标准选择主题并加入您的表格子集

    subject<-c(1,1,1,2,2,3,3,3)
    day<-c(1,2,3,1,2,1,2,3)
    RRT<-c(0,0,1,1,0,0,1,1)
    SOFA<-c(8,9,2,10,12,11,19,8)
    libo<-data.frame(subject,day,RRT,SOFA)
    
    library(dplyr, warn.conflicts = TRUE)
    libo %>%
      # select base on your criteria
      group_by(subject) %>%
      filter(RRT == 0 & day == 1) %>%
      select(subject) %>%
      # only keep rows from libo based on your subjects selection
      left_join(libo, by = "subject")
    #> # A tibble: 6 x 4
    #> # Groups:   subject [?]
    #>   subject   day   RRT  SOFA
    #>     <dbl> <dbl> <dbl> <dbl>
    #> 1       1     1     0     8
    #> 2       1     2     0     9
    #> 3       1     3     1     2
    #> 4       3     1     0    11
    #> 5       3     2     1    19
    #> 6       3     3     1     8
    

    【讨论】:

    • 非常完美。谢谢你。还有一个问题:如何使用这些值创建一个新表?
    • 您可以像创建第一个数据框一样使用&lt;- 进行分配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2021-07-05
    • 2020-11-02
    • 2017-06-09
    • 2018-04-05
    • 2017-09-22
    相关资源
    最近更新 更多