首页 > 解决方案 > 相对于每组的其他列拆分列值

问题描述

所以我有一个数据表,如:

在此处输入图像描述

我需要在每个 id-group 的 value2 关系中打破 value1

索引 1,2,3 是同一 id 的组因 -> value2 在组中的关系是 0.7((14+2+4)/14) 所以 value1 需要是 7000 -> 索引 2: value1=1000 , 索引 2: value2=2000 -> sum=10000

数据表需要如下所示:

在此处输入图像描述

标签: rdatatableformatting

解决方案


dplyr可以这样尝试:

df <- data.frame(index = 1:6,
                 id = c("abc", "abc", "abc", "def", "ghi", "ghi"),
                 value = c(10000,10000,10000,50000, 20000, 20000),
                 value2 = c(14,2,4,6,3,3))

df %>% 
  group_by(id) %>% 
  mutate(value = value*(value2/sum(value2)))
         

  index id    value value2
  <int> <fct> <dbl>  <dbl>
1     1 abc    7000     14
2     2 abc    1000      2
3     3 abc    2000      4
4     4 def   50000      6
5     5 ghi   10000      3
6     6 ghi   10000      3

编辑:这是您提到的扩展名。

df <- data.frame(index = 1:6,
                 id = c("abc", "abc", "abc", "def", "ghi", "ghi"),
                 value = c(10000,10000,10000,50000, 20000, 20000),
                 value2 = c(14,NA,4,6,NA, NA))


df %>% 
  group_by(id) %>%
  mutate(value2 = ifelse(!all(is.na(value2)) & is.na(value2), 0,
                         value2)) %>%
  mutate(value = ifelse(is.na(value2),
                        value/length(value2),
                        value*(value2/sum(value2))))

  index id     value value2
  <int> <fct>  <dbl>  <dbl>
1     1 abc    7778.     14
2     2 abc       0       0
3     3 abc    2222.      4
4     4 def   50000       6
5     5 ghi   10000      NA
6     6 ghi   10000      NA

推荐阅读