我有这种形式的数据框
id value
1 10
2 25
5 30
7 15
9 30
10 50
我想通过以下方式对其进行转换
id value
1 10
2 25
5 30
9 30
7+10 43
其中id为“ 7 + 10”的obs是权重为0.2和0.8的7和10的先前obs的加权平均值,换句话说为43 = 0.2 * 15 + 0.8 * 50。我试图使用函数聚合来执行此操作,但是它不起作用。我可以使用什么在特定行之间进行操作?
谢谢您的帮助。
答案 0 :(得分:1)
由于使用变量比使用行要容易得多,因此可以使用tidyr软件包(tidyverse的一部分)将数据从长格式转换为宽格式,进行转换,然后再转换为长格式再次与提迪尔:
library(tidyverse)
dat <- tibble(
id = c(1, 2, 5, 7, 9, 10),
value = c(10, 25, 30, 15, 30, 50)
)
dat %>%
spread(id, value) %>%
mutate(`7 + 10` = 0.2 * `7` + 0.8 * `10`) %>%
select(- `7`, - `10`) %>%
gather("id", "value", everything())
id value
<chr> <dbl>
1 1 10
2 2 25
3 5 30
4 9 30
5 7 + 10 43