95014


下記のようなデータフレームで、男女別にBPの四分位変数（BPq）を作成し、それぞれの下位25％を新変数（lowBP）=
1（その他は0）として作成したいです。

[code]

    df <- data.frame(
        ID = 1:4, age = c(43, 62, 54, 55), sex = c(0, 1, 1, 0), group = c(1, 2, 3, 3)
        BP = c(120, 130, 132, 110), BMI = c(21, 26, 23, 19))
    
[/code]

以下のコードで試みていますが、正確に分類（男女別に）できているかが不明です。変数の確認方法までご教示いただけると助かります。

[code]

    # 男女別のBP四分位変数を作成
    df <- df |> group_by(sex) |> mutate(BPq = ntile (BP,4))
    
    # 男女それぞれの下位25％をlowBP=1と定義
    df <- df |> mutate(lowBP = case_when(BPq == 1 ~ 1, TRUE ~ 0 ))
    
[/code]


CC BY-SA 4.0
2022-10-30T01:34:31.287
91892
2023-05-30T04:05:52.530
2022-11-01T01:26:16.367
54886
54886
question
r
１つの列の２つのグループ（男女）から四分位の変数を作成→新しい１つの変数を作成→正確に分類できているかの確認まで教えてください。


既に解決済みと思われますが念のための御参考です。  
グルーピングしてグループ内を値の大小で分割するコードの確認方法として `arrange()`
を使う実施例を下記に示します。ただし，提供データでは分割数（4）に対して対象データ数（2）が少ないので得られる情報も限られます。

[code]

    library(tidyverse)
    
    df <- data.frame(ID = 1:4,
                     age = c(43, 62, 54, 55),
                     sex = c(0, 1, 1, 0),
                     group = c(1, 2, 3, 3),
                     BP = c(120, 130, 132, 110),
                     BMI = c(21, 26, 23, 19))
    df <- df |>
        group_by(sex) |>
        mutate(BPq = ntile(BP, 4),
               lowBP = case_when(BPq == 1 ~ 1, TRUE ~ 0))
    df |>
        select(ID, sex, BP, BPq, lowBP) |>
        arrange(BP, .by_group = TRUE)
    
    ## # A tibble: 4 × 5
    ## # Groups:   sex [2]
    ##      ID   sex    BP   BPq lowBP
    ##   <int> <dbl> <dbl> <int> <dbl>
    ## 1     4     0   110     1     1
    ## 2     1     0   120     2     0
    ## 3     2     1   130     1     1
    ## 4     3     1   132     2     0
    
[/code]


CC BY-SA 4.0
2023-05-30T01:50:26.017
95014
2023-05-30T04:05:52.530
2023-05-30T04:05:52.530
54588
54588
91892
answer