簡體   English   中英

如何根據R中的公共列合並行

[英]How to merge rows based on common columns in R

我在一個看起來像這樣的數據框中工作:

vims <- data.frame(
  patient_ID = c("a", "a", "a", "b", "b"),
  Date = c(2020, 2020, 2018, 2020, 2028),
  Eye = c("Right", "Left", "Right", "Right", "Right"),
  V1 = c(21, 18, 30, 30, 18)
  V2 = c(28, 30, 15, 45, 60)
)

如您所見,數據有一個 ID,並且可能在不同日期對同一個 ID 進行多次評估,而且在這些日期內可能有不同的眼睛評估。 我正在嘗試合並行,以便按 ID 和日期排列以獲得包含 ID、日期和同一行中每只眼睛的所有信息的行(如果可用,右眼和左眼的 V1)

你在找這個嗎:

library(dplyr)
library(tidyr)

vims %>% pivot_wider(id_cols = c(patient_ID, Date), names_from = Eye, values_from = c(V1,V2))
# A tibble: 4 x 6
  patient_ID  Date V1_Right V1_Left V2_Right V2_Left
  <chr>      <dbl>    <dbl>   <dbl>    <dbl>   <dbl>
1 a           2020       21      18       28      30
2 a           2018       30      NA       15      NA
3 b           2020       30      NA       45      NA
4 b           2028       18      NA       60      NA

一個data.table替代方案:

library(data.table)
vims <- as.data.table(vims)

dcast(vims, patient_ID+Date~Eye, value.var = c("V1","V2"))

   patient_ID Date V1_Left V1_Right V2_Left V2_Right
1:          a 2018      NA       30      NA       15
2:          a 2020      18       21      30       28
3:          b 2020      NA       30      NA       45
4:          b 2028      NA       18      NA       60

暫無
暫無

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

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