如何根据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
我正在使用如下所示的数据框:
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