Как я могу сделать данные "грязными"? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть набор данных из 2 переменных ("param1", "param2"), измеренных в двух экземплярах для 3 экспериментальных условий (3 обработки "tx1", "tx2", "tx3"). Выходные данные прибора выглядят так:

 # A tibble: 6 x 3
  treatment param1 param2
  <chr>      <dbl>  <dbl>
1 tx1           20    300
2 tx1           22    310
3 tx2          155    400
4 tx2          160    403
5 tx3           34    900
6 tx3           40    890

, где дубликаты находятся ниже друг друга. Я использую GraphPad Prism для создания графиков, для которых требуются дубликаты рядом друг с другом, например:

# A tibble: 3 x 5
  treatment param1.1 param1.2 param2.1 param2.2
  <chr>        <dbl>    <dbl>    <dbl>    <dbl>
1 tx1             20       22      300      310
2 tx2            155      160      400      401
3 tx3             34       40      900      890

Я знаю, что это не аккуратные данные, но я застрял в графической программе, пока не научусь эффективно используйте ggplot.

Я думаю, что ответ на этот вопрос - "собрать" или "распространить", но я не знаю, как это сделать. Пожалуйста, помогите.

Спасибо !!

1 Ответ

0 голосов
/ 15 апреля 2020

Мы можем создать уникальный индекс для каждой группы, а затем использовать pivot_wider, который теперь позволяет включать значения из нескольких столбцов.

library(dplyr)

df %>%
 group_by(treatment) %>%
 mutate(row = row_number()) %>%
 tidyr::pivot_wider(names_from = row, values_from = c(param1, param2))


#  treatment param1_1 param1_2 param2_1 param2_2
#  <fct>        <int>    <int>    <int>    <int>
#1 tx1             20       22      300      310
#2 tx2            155      160      400      403
#3 tx3             34       40      900      890

Использование data.table

library(data.table)
dcast(setDT(df), treatment~rowid(treatment), value.var = c('param1', 'param2'))

data

df <- structure(list(treatment = structure(c(1L, 1L, 2L, 2L, 3L, 3L
), .Label = c("tx1", "tx2", "tx3"), class = "factor"), param1 = c(20L, 
22L, 155L, 160L, 34L, 40L), param2 = c(300L, 310L, 400L, 403L, 
900L, 890L)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))
...