【问题标题】:De-aggregate a data frame解聚合数据框
【发布时间】:2022-02-11 19:34:44
【问题描述】:

有许多类似的问题(例如Repeat each row of data.frame the number of times specified in a columnDe-aggregate / reverse-summarise / expand a dataset in RRepeating rows of data.frame in dplyr),但我的数据集与这些问题的答案所假设的结构不同。

我有一个数据框,其中包含每个group 内的测量频率以及每组total_N 中每个结果的观察总数:

tibble(group=c("A", "B"), total_N=c(4,5), measure_A=c(1,4), measure_B=c(2,3))
# A tibble: 2 x 4
  group total_N outcome_A outcome_B
  <chr>   <dbl>     <dbl>     <dbl>
1 A           4         1         2
2 B           5         4         3

我想对数据进行去聚合,以便数据框的行数与总观察值一样多,并且每个结果都有一个 1 用于所有有结果的观察结果和一个0 用于所有没有结果的观察结果。因此最终的结果应该是这样的数据框:

# A tibble: 9 x 3
  group outcome_A outcome_B
  <chr>     <dbl>     <dbl>
1 A             1         1
2 A             0         1
3 A             0         0
4 A             0         0
5 B             1         1
6 B             1         1
7 B             1         1
8 B             1         0
9 B             0         0

由于汇总数据不包含任何有关outcome_Aoutcome_B 组合频率(即相关性)的信息,因此可以忽略。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这是一个 tidyverse 解决方案。

    正如您所说,将一行重复任意次数很容易。如果您知道row_number() 在对数据框进行分组时对组内的行进行计数,那么将分组计数转换为存在/不存在标志很容易。 across 为您提供了一种简洁地转换多个计数列的方法。

    library(tidyverse)
    
    tibble(group=c("A", "B"), total_N=c(4,5), measure_A=c(1,4), measure_B=c(2,3)) %>% 
      uncount(total_N) %>% 
      group_by(group) %>% 
      mutate(
        across(
          starts_with("measure"), 
          function(x) as.numeric(row_number() <= x)
        )
      ) %>%
      ungroup()
    # A tibble: 9 × 3
      group measure_A measure_B
      <chr>     <dbl>     <dbl>
    1 A             1         1
    2 A             0         1
    3 A             0         0
    4 A             0         0
    5 B             1         1
    6 B             1         1
    7 B             1         1
    8 B             1         0
    9 B             0         0
    

    正如您所说,这种方法没有考虑结果列之间的相关性,因为这无法从分组数据中推断出来。

    【讨论】:

    • row_number() &lt;= x 是个好技巧!非常感谢!
    • 完全跑题了,你不必觉得有必要对此做出反应,但我读了你的“关于我”,发现这是一个迷人的巧合:我可能比你经验少得多所有这些,但我也将研究重点放在贝叶斯自适应设计上,特别是剂量寻找,我是伦理委员会的成员(动物试验)并且喜欢用我的 200-500 毫米(鸟类,不是运动,虽然)拍摄。
    猜你喜欢
    • 2018-09-23
    • 2016-01-13
    • 2018-09-19
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多