#r
Вопрос:
У меня есть фрейм данных со столбцами SampleID, методом, параметром и значением.
set.seed(123) mydata lt;- data.frame(sample_ID = rep(1:100, each=4), method = rep(LETTERS[1:2], 100), parameter = rep(c("M1","M2"),times=c(2,2)), value = round(runif(100, min = 100, max = 5000)), stringsAsFactors = FALSE)
Этот фрейм данных организован в длинном формате, и я хотел бы преобразовать его в широкий формат следующим образом: идентификатор sample_ID должен быть идентификатором строки — теперь метод столбцов параметр должны быть объединены с соответствующим значением, т. е.
Sample_ID 1 имеет значение
- 1509 для метода A и параметра M1
- 3963 для метода B и параметра M1
- 2104 для метода А и параметра М2
- 4427 для метода В и параметра М2
Теперь я хотел бы преобразовать эти 4 строки в одну строку, как это:
sample_ID = 1, A_M1 = 1509, B_M1 = 3963, A_M2 = 2104, B_M2 = 4427
Следующая строка будет состоять из этих переменных с sample_ID = 2, …
Извините, но я не смог сделать это с помощью spread() или melt().
Заранее благодарю вас!
Ответ №1:
Использование tidyr::pivot_wider
тебя могло бы сделать:
tidyr::pivot_wider(mydata, names_from = c("method", "parameter"), values_from = value) #gt; # A tibble: 100 × 5 #gt; sample_ID A_M1 B_M1 A_M2 B_M2 #gt; lt;intgt; lt;dblgt; lt;dblgt; lt;dblgt; lt;dblgt; #gt; 1 1 1509 3963 2104 4427 #gt; 2 2 4708 323 2688 4473 #gt; 3 3 2802 2337 4788 2321 #gt; 4 4 3420 2906 604 4509 #gt; 5 5 1306 306 1707 4777 #gt; 6 6 4459 3495 3238 4972 #gt; 7 7 3313 3572 2766 3011 #gt; 8 8 1517 821 4819 4521 #gt; 9 9 3484 3998 221 2441 #gt; 10 10 3816 1160 1659 1235 #gt; # … with 90 more rows
Ответ №2:
Использование dcast()
пакета from data.table
dcast(mydata, sample_ID~...)
Если вы сначала преобразуете свой data.frame в data.table setDT()
, вы можете выразить это с помощью соответствующей нотации data.table
mydata[, dcast(.SD, sample_ID~...)]
Комментарии:
1. Спасибо вам за ваш ответ!