gpt4 book ai didi

r - 取消聚合数据框

转载 作者:行者123 更新时间:2023-12-05 01:53:24 25 4
gpt4 key购买 nike

有很多类似的问题(例如 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),但我的数据集的结构与这些问题的答案假设不同。

我有一个数据框,其中包含每个 中的测量频率以及每个组中每个结果的观察总数 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 组合频率(即相关性)的信息,因此可以忽略。

最佳答案

这是一个 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

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

关于r - 取消聚合数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71079312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com