【问题标题】:How can I make data "messy"?如何使数据“混乱”?
【发布时间】:2020-04-15 01:25:15
【问题描述】:

我有一个包含 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 之前,我一直坚持使用绘图程序。

我猜答案是“聚集”或“传播”,但我不知道该怎么做。请帮忙。

谢谢!!

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

    我们可以为每个组创建一个唯一索引,然后使用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'))
    

    数据

    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"))
    

    【讨论】:

      猜你喜欢
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多