【问题标题】:How to merge rows based on common columns in R如何根据R中的公共列合并行
【发布时间】:2021-07-21 10:39:41
【问题描述】:

我正在使用如下所示的数据框:

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 用于右眼和左眼)

【问题讨论】:

  • 我们应该如何解读V1和V2的区别?你提到V1应该用于左眼和右眼,这是否意味着我们可以忽略V2?
  • 对于我缺乏有关流程和我想要做什么的信息,我深表歉意。 Khartik S 回答了,不管我真的很感谢你的帮助

标签: r merge


【解决方案1】:

你在找这个吗:

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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2022-11-28
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      相关资源
      最近更新 更多