0
我有一個數據幀(如下所示)列的值:操縱基於另一列
df <- read.table(header = TRUE, text =
"STUD_ID MEAS VALUE
1 LVEF(M-M) 69
1 LVEF(2D) 66
2 LVEF(2D) 36
2 LVEF(2D) 72
2 IVSD 63
3 LVEF(M-M) 50
4 LVEF(2D) 71
4 PASP 55", stringsAsFactors = FALSE)
我希望把重點放在MEAS
是要麼LVEF(M-M)
或LVEF(2D)
。
- 如果
STUD_ID
具有VALUE
s表示對應於兩個LVEF(M-M)
和LVEF(2D)
,那麼我們只篩選後者即LVEF(2D)
。 - 如果一個
STUD_ID
有2個VALUE
s對應於LVEF(2D)
,那麼我們取平均值。
我所需的輸出是:
# STUD_ID MEAS VALUE
# 1 LVEF(2D) 66
# 2 LVEF(2D) 54
# 2 IVSD 63
# 3 LVEF(M-M) 50
# 4 LVEF(2D) 71
# 4 PASP 55
我嘗試以下,但它給了我一個錯誤:
df %>%
filter(MEAS == "LVEF(M-M)" | MEAS == "LVEF(2D)") %>%
arrange(STUD_ID, MEAS) %>%
group_by(STUD_ID, MEAS) %>%
mutate(n = n()) %>%
group_by(STUD_ID) %>%
mutate(nd = n_distinct(MEAS)) %>%
mutate(VALUE =
case_when(nd == 2 ~ VALUE[which(MEAS == "LVEF(2D)")],
nd == 1 & n > 1 ~ mean(VALUE),
TRUE ~ VALUE)) %>%
bind_rows(
df %>% filter(MEAS != "LVEF(M-M)" & MEAS != "LVEF(2D)")
)
我的數據幀中包含的其他變量除了這3個變量,我想保留它們。
我必須做一些連接,如果我有這三個,我還是想在最後的數據集保留旁邊的其他變量? – HNSKD
這取決於你想要對其他變量進行平均的行 - 你可以在'summarise'中包含它們,或者在'df'結尾包含它們的'left_join'。請注意,如果每個ID有多個,上面的代碼也會對任何「IVSD」或「PASP」行進行平均 - 這可能是也可能不是您想要的。 –