#r #reshape #transpose #strsplit #csv
#r #изменение формы #транспонировать #strsplit #csv
Вопрос:
У меня есть данные в следующем формате:
dataset <- data.frame(taxa = c("k__Archaea| p__Crenarchaeota", "k__Archaea| p__Euryarchaeota", "k__Bacteria| p__[Thermi]"),
"11908.MM.0008.Inf.6m.Stool" =c(0,1760,0),
"11908.MM.01115.Inf.6m.Stool" =c(0,1517,0),
"11908.MM.0044.Inf.6m.Stool" =c(0,10815,0),
"11908.MM.0125.Mom.6m.Stool" = c(0,4719,0))
view(dataset)
И я хотел бы преобразовать его в следующий формат:
fix_dataset <- data.frame(study_id = c(0008, 0115, 0044, 0125),
individual = c("Inf", "Inf", "Inf", "Mom" ),
`k__Archaea| p__Crenarchaeota` = c(0,0,0,0),
`k__Archaea| p__Euryarchaeota`= c(1760, 1517,10815, 4719),
`` = c(0,0,0,0),
timept1 = c("6m", "6m", "6m", "6m"))
view(fix_dataset)
Я пытаюсь вырезать начальный номер серии 11908 и «Табурет» из каждого имени столбца, разделить другие части имен столбцов и преобразовать из широкого в длинный формат.
Я использую следующий код
library(tidyverse)
dataset %>%
pivot_longer(cols = -taxa) %>%
separate(col = name, into = c("info1", "info2", "study_id", "individual", "timept1", "info3"), sep = "[.]") %>%
pivot_wider(names_from = taxa,
values_from = value) %>%
select(study_id, individual, starts_with("k_"), timept1)
И я получаю следующее сообщение об ошибке, когда применяю это к своим данным
Error in select(., study_id, individual, timept1, starts_with("k_")) :
unused arguments (study_id, individual, timept1, starts_with("k_"))
In addition: Warning messages:
1: Expected 6 pieces. Additional pieces discarded in 44 rows [242, 243, 903, 904, 1564, 1565, 2225, 2226, 2886, 2887, 3547, 3548, 4208, 4209, 4869, 4870, 5530, 5531, 6191, 6192, ...].
2: Expected 6 pieces. Missing pieces filled with `NA` in 1012 rows [74, 93, 94, 223, 224, 225, 226, 227, 228, 229, 230, 469, 470, 532, 533, 535, 536, 540, 580, 593, ...].
3: Values are not uniquely identified; output will contain list-cols.
* Use `values_fn = list` to suppress this warning.
* Use `values_fn = length` to identify where the duplicates arise
* Use `values_fn = {summary_fun}` to summarise duplicates
У кого-нибудь есть предложения по этим сообщениям об ошибках?
Комментарии:
1. Вы можете легко избавиться от «11908» и «табуретки» с помощью gsub. Например
gsub("^11908|Stool$","",colnames(dataset))
. Затем используйте изменение формы для преобразования в длинный формат.2. Не могли бы вы уточнить, является ли желаемым результатом fix_dataset или вы хотите, чтобы набор fix_dataset по-прежнему был преобразован в длинный формат, и если да, то на основе каких столбцов?
3. набор fix_dataset является желаемым результатом, да
Ответ №1:
Вы можете добиться этого с помощью следующего кода:
library(tidyverse)
dataset %>%
pivot_longer(cols = -taxa) %>%
separate(col = name, into = c("info1", "info2", "study_id", "individual", "timept1", "info3"), sep = "[.]") %>%
pivot_wider(names_from = taxa,
values_from = value) %>%
select(study_id, individual, starts_with("taxa"), timept1)
что дает:
# A tibble: 4 x 6
study_id individual taxa1 taxa2 taxa3 timept1
<chr> <chr> <dbl> <dbl> <dbl> <chr>
1 0008 Inf 0 1760 0 6m
2 01115 Inf 0 1517 0 6m
3 0044 Inf 0 10815 0 6m
4 0125 Mom 0 4719 0 6m
Обратите внимание, что в вашем идентификаторе исследования есть некоторое несоответствие, т. Е. В вашем исходном наборе данных один из идентификаторов — «01115», а в вашем предпочтительном выводе — «0115».
Комментарии:
1. да, это была ошибка с моей стороны при вводе образца набора данных
2. Если решение подходит для вас, вы можете выбрать ответ в качестве принятого ответа, нажав на маленькую галочку слева.
3. Не могли бы вы предоставить более исчерпывающий пример кода, который также содержит некоторые из этих других столбцов, которые не вписываются в текущую схему именования?