Хотя я не знаю , почему произошло изменение, я бы предположил, что в глубине души эта ошибка связана с тем, что ваш dat_2
столбик не является аккуратным . Повторно включать разницу между «mfi» и «dil» как в отдельный столбец antigen_dil
, так и в виде двух отдельных столбцов mfi
и dil
.
В зависимости от значения ваших данных, два формата с pivot_longer
легко работают:
dat_1 %>%
pivot_longer(
cols = msp3_mfi:pf_aarp_dil,
names_to = c('antigen', '.value'),
names_pattern = '(.+)_(.+)'
)
#> # A tibble: 4 x 5
#> original_id timepoint antigen mfi dil
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 id_005 C_0 msp3 10.5 400
#> 2 id_005 C_0 pf_aarp 22.2 400
#> 3 id_005 D10 msp3 8.5 400
#> 4 id_005 D10 pf_aarp 10.2 400
или
dat_1 %>%
pivot_longer(
cols = msp3_mfi:pf_aarp_dil,
names_to = c('antigen', 'antigen_dil'),
names_pattern = '(.+)_(.+)'
)
#> # A tibble: 8 x 5
#> original_id timepoint antigen antigen_dil value
#> <chr> <chr> <chr> <chr> <dbl>
#> 1 id_005 C_0 msp3 mfi 10.5
#> 2 id_005 C_0 msp3 dil 400
#> 3 id_005 C_0 pf_aarp mfi 22.2
#> 4 id_005 C_0 pf_aarp dil 400
#> 5 id_005 D10 msp3 mfi 8.5
#> 6 id_005 D10 msp3 dil 400
#> 7 id_005 D10 pf_aarp mfi 10.2
#> 8 id_005 D10 pf_aarp dil 400
Если вам действительно нужен тиббл в формате, который вы описали, вы можете использовать:
dat_1 %>%
pivot_longer(
cols = msp3_mfi:pf_aarp_dil,
names_to = c('antigen', 'antigen_dil'),
names_pattern = '(.+)_(.+)'
) %>%
mutate(
mfi = if_else(antigen_dil == "mfi", value, NA_real_),
dil = if_else(antigen_dil == "dil", value, NA_real_)
) %>%
select(-value)
#> # A tibble: 8 x 6
#> original_id timepoint antigen antigen_dil mfi dil
#> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 id_005 C_0 msp3 mfi 10.5 NA
#> 2 id_005 C_0 msp3 dil NA 400
#> 3 id_005 C_0 pf_aarp mfi 22.2 NA
#> 4 id_005 C_0 pf_aarp dil NA 400
#> 5 id_005 D10 msp3 mfi 8.5 NA
#> 6 id_005 D10 msp3 dil NA 400
#> 7 id_005 D10 pf_aarp mfi 10.2 NA
#> 8 id_005 D10 pf_aarp dil NA 400
Приведенные выше фрагменты используют для создания dat_1
:
library(tidyverse)
dat_1 <-
tribble(
~original_id, ~timepoint, ~msp3_mfi, ~msp3_dil, ~pf_aarp_mfi, ~pf_aarp_dil,
"id_005", "C_0", 10.5, 400, 22.2, 400,
"id_005", "D10", 8.5, 400, 10.25, 400
)
dat_1
#> # A tibble: 2 x 6
#> original_id timepoint msp3_mfi msp3_dil pf_aarp_mfi pf_aarp_dil
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 id_005 C_0 10.5 400 22.2 400
#> 2 id_005 D10 8.5 400 10.2 400