【问题标题】:Split column value in relation to other columns per group相对于每组的其他列拆分列值
【发布时间】:2020-12-29 20:18:12
【问题描述】:

所以我有一个像这样的数据表:

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

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

数据表需要如下所示:

【问题讨论】:

标签: r datatable formatting


【解决方案1】:

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

【讨论】:

  • 除此之外,“值 2”列没有数据。如果 id-group 的所有 Value2 都没有数据,则 value1 应该分成相同的部分(例如 50:50 有 2 个 id)。如果一个或多个 value2 有值,那么 value2 中没有数据的组的其他 id 应该被视为 value2=0,你知道怎么做吗?
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多