Преобразование в формат различных широких форматов

#r

#r

Вопрос:

У меня есть несколько генов для каждого из них, у меня есть, сколько у них клональных или субклональных мутаций, как показано ниже

 # A tibble: 6 x 3
  gene_name clonal subclonal
  <chr>      <int>     <int>
1 APC            3         1
2 ARID1A         5         2
3 ARID1B        18         7
4 ARID2         16         2
5 CCDC102B     100        30
6 CCND1          2         0
> 
 

Для каждого гена, например APC, я хочу что-то вроде приведенного ниже

введите описание изображения здесь

Есть ли способ сделать это в R?

Большое вам спасибо

Комментарии:

1. APC — это ген, для которого у нас есть 3 клональные мутации и 1 субклональная мутация

2. Да, именно так

Ответ №1:

Вот вариант, при котором мы преобразуем в «длинный» формат с pivot_longer помощью, затем разворачиваем строки на основе числового числа в столбце «значение» и создаем Yes_no из проверки, является ли значение «клональности» «клональным»

 library(dplyr)
library(tidyr)
df1 %>% 
  pivot_longer(cols = clonal:subclonal, names_to = 'Clonality') %>% 
  uncount(value) %>% 
  mutate(Yes_no = case_when(Clonality == 'clonal' ~ 'Yes', TRUE ~ 'No'))
 

-вывод

 # A tibble: 186 x 3
#   gene_name Clonality Yes_no
#   <chr>     <chr>     <chr> 
# 1 APC       clonal    Yes   
# 2 APC       clonal    Yes   
# 3 APC       clonal    Yes   
# 4 APC       subclonal No    
# 5 ARID1A    clonal    Yes   
# 6 ARID1A    clonal    Yes   
# 7 ARID1A    clonal    Yes   
# 8 ARID1A    clonal    Yes   
# 9 ARID1A    clonal    Yes   
#10 ARID1A    subclonal No    
# … with 176 more rows
 

данные

 df1 <- structure(list(gene_name = c("APC", "ARID1A", "ARID1B", "ARID2", 
"CCDC102B", "CCND1"), clonal = c(3L, 5L, 18L, 16L, 100L, 2L), 
    subclonal = c(1L, 2L, 7L, 2L, 30L, 0L)),
    class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))