簡體   English   中英

如何將行聚合到具有三個級別的因子變量?

[英]How do you aggregate rows to a factor variable with three levels?

我有一個數據集,其中一些參與者有多行,我需要以每個參與者只有一行的方式聚合數據。 數據集包含不同的變量類型(例如,因子、日期、年齡等)我編寫了一個有效的代碼,如下所示:

example4 <- SMARTdata_50j_diagc_2016  %>% 
  group_by( Patient_Id ) %>%  
  summarise( Groep = first( Groep ),
             Ziekenhuis_Nr = first( Ziekenhuis_Nr ),
             Ziekenhuistype = first( Ziekenhuistype ),
             aantalDBC = n(),
             aantalVervolg = sum( as.numeric( Zorgtype_Code ) ),
             Leeftijd = mean( Lft_patient_openenDBC ),
             MRI_nee_ja = max( ifelse( MRI_nee_ja == 0, 0, 1 ) ),
             aantalMRI = sum( MRI_Aantal ),
             Artroscopie_nee_ja = max( ifelse( Artroscopie_nee_jaz_jam == 0, 0, 1 ) ),
             aantalArtroscopie = sum( Artroscopie_aantal ),
             overigDBC = mean( Aantal_overigeDBC_bijopenen ),
             DBC_open = min( open_DBC ), 
             DBC_sluiten = max( sluiten_DBC ) ) %>% 
  as.data.frame()

此代碼為每個參與者提供了一行。 但是,我還有一個變量需要包含在新數據框中,但我不知道該怎么做。 我需要添加的變量稱為“Diagnose_Code”,它是具有兩個級別的因子,即 0(代表 1801)和 1(代表 1805)。

對於具有多行(在原始數據幀中)的參與者,該變量同時具有 0 和 1 的參與者。 現在,在我的新數據框中,我想為“Diagnose_Code”創建一個具有三個級別的變量:0 表示該參與者的所有行均為 0,1 表示該參與者的所有行均為 1,2 表示該參與者的所有行該參與者同時擁有 0 和 1。

我不知道如何進行這項工作。 我對 ifelse 代碼有點掙扎,但沒有成功。 有誰知道如何在我的代碼中完成這項工作? 先感謝您!

使用玩具數據集可以這樣實現:

library(dplyr)

df <- data.frame(
  id = rep(1:3, each = 3),
  diagnosis_code = c(rep(1,3), rep(0, 3), c(1, 0, 1)),
  stringsAsFactors = FALSE
)
df %>% 
  group_by(id) %>% 
  summarise(diagnosis_code = case_when(
    all(diagnosis_code == 1) ~ 1,
    all(diagnosis_code == 0) ~ 0,
    TRUE ~ 2
  ))
#> # A tibble: 3 x 2
#>      id diagnosis_code
#>   <int>          <dbl>
#> 1     1              1
#> 2     2              0
#> 3     3              2

reprex 包(v0.3.0) 於 2020 年 3 月 29 日創建

使用 ifelse 應該可以工作:

df %>%
group_by(id) %>%
  summarise(diag=ifelse(max(diag)!=min(diag), 2, 
                          ifelse(max(diag==1), 1, 0)))

# A tibble: 3 x 2
     id  diag
  <dbl> <dbl>
1     1     2
2     2     1
3     3     0

數據

df <- data.frame(id=c(1,1,1,2,2,2,3,3,3), diag=c(1,0,0,1,1,1,0,0,0))
df %>% 
  group_by(Patient_Id) %>% 
  summarise(Diagnose_Code = case_when(n_distinct(Diagnose_Code) == 2 ~ 3, 
                                      sum(Diagnose_Code) ==  1 ~ 1, 
                                      TRUE ~ 0 ))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM