내 데이터는 다음과 같습니다 (간단한 버전).
df <- read.table(text="cohort,med1,med2,med3,meq1,meq2,meq3
a,drugA,drugB,NA,4.3,1.9,NA
b,drugB,drugC,drugA,2.1,2.0,4.5
a,drugC,NA,NA,2.0,NA,NA
a,drugA,drugB,NA,5.5,3.6,NA
b,drugB,drugA,drugC,4.9,4.1,4.1", sep=",", header=TRUE)
## > df
## cohort med1 med2 med3 meq1 meq2 meq3
## 1 a drugA drugB <NA> 4.3 1.9 NA
## 2 b drugB drugC drugA 2.1 2.0 4.5
## 3 a drugC <NA> <NA> 2.0 NA NA
## 4 a drugA drugB <NA> 5.5 3.6 NA
## 5 b drugB drugA drugC 4.9 4.1 4.1
각 med
값은 각 값과 쌍을 이룹니다 meq
(예 :의 값 meq1
은의 해당 인스턴스에 대한 값임 med1
). 어떻게 데이터를 그룹화 할 재구성 수 med
에 의해 cohort
과의 수를 모두 얻을 수 med
및 평균 값을 meq
?
예를 들면 :
cohort med meq
a drugA 4.9
a drugB 2.75
a drugC 2.0
b drugA 4.3
b drugB 4.5
b drugC 3.05
그리고 여기에 tidyr
방법이 있습니다.
library(dplyr)
library(tidyr)
df <- read.table(text ="
cohort med1 med2 med3 meq1 meq2 meq3
a drugA drugB NA 4.3 1.9 NA
b drugB drugC drugA 2.1 2.0 4.5
a drugC NA NA 2.0 NA NA
a drugA drugB NA 5.5 3.6 NA
b drugB drugA drugC 4.9 4.1 4.1
", header = TRUE)
df_long <- df %>%
pivot_longer(cols = starts_with("me"),
names_to = c(".value", "m"),
names_pattern = "(me(?:d|q))(\\d)")
이 첫 번째 단계는 행당 여러 관측치를 그룹화합니다 (각 1, 2 및 3에 대한 med 및 meq).
print(df_long)
#> # A tibble: 15 x 4
#> cohort m med meq
#> <fct> <chr> <fct> <dbl>
#> 1 a 1 drugA 4.3
#> 2 a 2 drugB 1.9
#> 3 a 3 <NA> NA
#> 4 b 1 drugB 2.1
#> 5 b 2 drugC 2
#> 6 b 3 drugA 4.5
#> 7 a 1 drugC 2
#> 8 a 2 <NA> NA
#> 9 a 3 <NA> NA
#> 10 a 1 drugA 5.5
#> 11 a 2 drugB 3.6
#> 12 a 3 <NA> NA
#> 13 b 1 drugB 4.9
#> 14 b 2 drugA 4.1
#> 15 b 3 drugC 4.1
그런 다음 각 코호트에 대한 각 약물의 평균을 취할 수 있습니다.
df_long %>%
group_by(cohort, med) %>%
summarize(meq = mean(meq))
#> Warning: Factor `med` contains implicit NA, consider using
#> `forcats::fct_explicit_na`
#> # A tibble: 7 x 3
#> # Groups: cohort [2]
#> cohort med meq
#> <fct> <fct> <dbl>
#> 1 a drugA 4.9
#> 2 a drugB 2.75
#> 3 a drugC 2
#> 4 a <NA> NA
#> 5 b drugA 4.3
#> 6 b drugB 3.5
#> 7 b drugC 3.05
reprex 패키지 (v0.3.0)에 의해 2020-04-10에 생성됨
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다