簡體   English   中英

使用多個變量的 case_when 和 mutate

[英]Case_when and mutate using multiple variables

這是我第一次使用 R,我一直在嘗試將代碼從 SPSS 轉移到 R,語法是使用來自多個變量的多個條件在 R 中創建一個新變量。 等效的 SPSS 語法是:

COMPUTE OPEN=0.
 
DO IF (APP=1).
   COMPUTE OPEN = 2.
ELSE IF (SCO12 >= 1 AND SCO12 <= 50).
    COMPUTE OPEN = 2.
ELSE IF NOW = 1.
     COMPUTE OPEN = 2.
ELSE IF EWEEK =1.
      COMPUTE OPEN =2.       
ELSE IF ROLL = 1.
      DO IF (AT = 1 or AT = 2).
          COMPUTE OPEN = 2.
      ELSE IF AT = 3.
          COMPUTE OPEN = 1.
      ELSE IF AT = -8.
          COMPUTE OPEN = -8.
      ELSE.
          COMPUTE OPEN = 2.
      END IF.
ELSE IF (APP=-8 OR NOW = -8 OR ROLL = -8 or EWEEK=-8).
      COMPUTE OPEN = -8.
ELSE IF (AGE=16 and (SCO12=97 or SCO12=-9)) .
      COMPUTE OPEN =-8.
ELSE.
      COMPUTE OPEN = 1.
END IF.

到目前為止我得到的 R 代碼是


OD21 %>% mutate(OPEN = case_when(APP = 1 ~ 2,
                                 (SCO12 >=1 & SCO12 <=50) ~ 2,
                                 NOW = 1 ~ 2,
                                 EWEEK = 1 ~ 2,
                                 ROLL = 1 & (AT = 1 | AT = 2) ~ 2,
                                 ROLL = 1 & AT = 3 ~ 1,
                                 ROLL = 1 & AT = -8 ~ -8)

但是我可以弄清楚如何繼續嗎?

如果我正確理解您的 SPSS 代碼(我自己不是 SPSS 用戶)

OD21 <- OD21 %>%
    mutate(OPEN = case_when(
                            # "OPEN" will be == 2
                            APP == 1 ~ 2,
                            (SCO12 >= 1 & SCO12 <= 50) ~ 2,
                            NOW == 1 ~ 2,
                            EWEEK == 1 ~ 2,
                            ROLL == 1 & (AT == 1 | AT == 2) ~ 2,
                            ROLL == 1 & AT != 1 & AT != 2 & AT != 3 & AT != -8 ~ 2,

                            # "OPEN" will be == -8
                            ROLL == 1 & AT == -8 ~ -8,
                            APP == -8 | NOW == -8 | ROLL == -8 | EWEEK == -8 ~ -8,
                            AGE == 16 & (SCO12 == 97 | SCO12 == -9) ~ -8,

                            # "OPEN" will be == 1
                            TRUE ~ 1
                            )

沒有測試,因為我沒有可重現的例子。

  1. 在 R 中,您使用==檢查兩個數字之間的等價性(不是使用單個= ,這是不同的運算符)。
  2. 您可以在末尾使用TRUE ~來涵蓋之前語句中未涵蓋的所有情況
  3. 除非您重新分配<- object,否則mutate不會保存您的數據集

暫無
暫無

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

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