我有一些試驗資料,其中每個參與者被多次評估多個分數,并且是長格式的。例如:
set.seed(1)
data <- data.frame(patient = rep(c(100, 101, 102, 103), 3),
group = rep(c("A", "B", "A", "B"), 3),
time = rep(c(0, 1, 2), each = 4),
score_a = runif(12),
score_b = runif(12))
print(data, digits = 2)
patient group time score_a score_b
1 100 A 0 0.266 0.69
2 101 B 0 0.372 0.38
3 102 A 0 0.573 0.77
4 103 B 0 0.908 0.50
5 100 A 1 0.202 0.72
6 101 B 1 0.898 0.99
7 102 A 1 0.945 0.38
8 103 B 1 0.661 0.78
9 100 A 2 0.629 0.93
10 101 B 2 0.062 0.21
11 102 A 2 0.206 0.65
12 103 B 2 0.177 0.13
我想以某種方式對這些資料進行旋轉,以便將其保留為長格式,但將基線(時間 = 0)測量值提取為單獨的列。因此,新列將是:
patient group score_a_0 score_b_0 time score_a score_b
對于示例資料集,在奇怪的樞軸之后它將有 8 行(時間 1 和時間 2,4 名患者)。
這樣,在每個時間點我都可以調整基線。我正在尋找一個通用的解決方案,因為實際的資料集有 7 個分數和 6 個跟進。我假設解決方案將涉及 和 的組合,pivot_wider但pivot_longer我無法使其發揮作用。
理想的輸出是:
patient group time score_a score_b score_a_0 score_b_0
1 100 A 1 0.20168193 0.7176185 0.2655087 0.6870228
2 101 B 1 0.89838969 0.9919061 0.3721239 0.3841037
3 102 A 1 0.94467527 0.3800352 0.5728534 0.7698414
4 103 B 1 0.66079779 0.7774452 0.9082078 0.4976992
5 100 A 2 0.62911404 0.9347052 0.2655087 0.6870228
6 101 B 2 0.06178627 0.2121425 0.3721239 0.3841037
7 102 A 2 0.20597457 0.6516738 0.5728534 0.7698414
8 103 B 2 0.17655675 0.1255551 0.9082078 0.4976992
uj5u.com熱心網友回復:
按“患者”分組,通過回圈“score_ _0”列將“time”為0的“score_”列的值設定為子集across,然后filter將“time”為0的行取出來創建“score”列
library(dplyr)
data %>%
group_by(patient) %>%
mutate(across(starts_with('score_'), ~ .x[time == 0],
.names = "{.col}_0")) %>%
ungroup %>%
filter(time != 0)
-輸出
# A tibble: 8 × 7
patient group time score_a score_b score_a_0 score_b_0
<dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 100 A 1 0.202 0.718 0.266 0.687
2 101 B 1 0.898 0.992 0.372 0.384
3 102 A 1 0.945 0.380 0.573 0.770
4 103 B 1 0.661 0.777 0.908 0.498
5 100 A 2 0.629 0.935 0.266 0.687
6 101 B 2 0.0618 0.212 0.372 0.384
7 102 A 2 0.206 0.652 0.573 0.770
8 103 B 2 0.177 0.126 0.908 0.498
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/524547.html
標籤:r蒂迪尔
上一篇:可能是一個錯誤或只是一個使用“背景顏色”和`DT`的新行為
下一篇:按組獲取日期最后條件
