gpt4 book ai didi

r - 将未标记的计数分配给其他标记

转载 作者:行者123 更新时间:2023-12-02 16:09:28 25 4
gpt4 key购买 nike

我有一张很长的 table ,看起来像这样:

library(tidyverse)
x=structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L), loc = c("A", "B", "?", "A", "B", "?"), count1 = c(10L, 20L, 50L, 5L, 22L, 10L), count2 = c(324L, 564L, 121L, 87L, 66L, 445L)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))
x
#> # A tibble: 6 x 4
#> id loc count1 count2
#> <int> <chr> <int> <int>
#> 1 1 A 10 324
#> 2 1 B 20 564
#> 3 1 ? 50 121
#> 4 2 A 5 87
#> 5 2 B 22 66
#> 6 2 ? 10 445

对于每个 id,我想将 loc 未知的计数统一分配给 loc A 和 loc B。

例如,对于id==1 和列count1,loc A 代表总数的1/3,因此50 的1/3 分配给组A 50 的 2/3 分配给 B 组,分别以 26.7 和 53.3 结束。然后应删除具有未知 loc 的行。

除了 A、B 或 ? 之外,loc 没有(当前)其他可能的值。

A/A+B 的比率对于每个计数和每个 id 都是不同的。

我尝试了多种方法来做到这一点,包括旋转和移调,但我从未设法达到预期的结果。

这是完整的预期输出:

expected=structure(list(id = c(1L, 1L, 2L, 2L), loc = c("A", "B", "A", "B"), count1 = c(26.67, 53.33, 6.85, 30.15), count2 = c(368.15, 640.85, 340.04, 257.96)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))

expected
#> # A tibble: 4 x 4
#> id loc count1 count2
#> <int> <chr> <dbl> <dbl>
#> 1 1 A 26.7 368.
#> 2 1 B 53.3 641.
#> 3 2 A 6.85 340.
#> 4 2 B 30.2 258.

#Totals are obviously the same:
x %>% group_by(id) %>% summarise(across(count1:count2, sum))
#> # A tibble: 2 x 3
#> id count1 count2
#> <int> <int> <int>
#> 1 1 80 1009
#> 2 2 37 598
expected %>% group_by(id) %>% summarise(across(count1:count2, sum))
#> # A tibble: 2 x 3
#> id count1 count2
#> <int> <dbl> <dbl>
#> 1 1 80 1009
#> 2 2 37 598

reprex package 创建于 2021-07-16 (v2.0.0)

最佳答案

也许这有帮助

library(dplyr)
x %>%
group_by(id) %>%
mutate(across(starts_with('count'), ~ {
tmp <- .
i1 <- loc == '?'
tmp[!i1] <- tmp[!i1] + tmp[!i1]/
sum(tmp[!i1]) * tmp[i1]
tmp})) %>%
ungroup %>%
filter(loc != '?')

-输出

# A tibble: 4 x 4
id loc count1 count2
<int> <chr> <dbl> <dbl>
1 1 A 26.7 368.
2 1 B 53.3 641.
3 2 A 6.85 340.
4 2 B 30.1 258.

关于r - 将未标记的计数分配给其他标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68412721/

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