r - 通过外部向量的动态乘法动态汇总
问题描述
我有一个这样的小标题:
X = tibble(Name = rep(c("A","B","C"),5),
Coeffs_1 = runif(15,0,1),
Coeffs_2 = runif(15,0,1)) %>% arrange(Name)
Y = runif(10,0,100)
在此示例中,每个“名称”的“Reps”数量任意固定为 5,Coeffs_2 的数量任意固定为 2,但在我的代码中它们可以是任何数字,我不知道确切的数字。
我还有一个带有 n = reps*2 元素的向量:
Y = runif(10,0,100)
在这种特定情况下,它是 10 = 5*2。
我的任务是根据每个名称、每个 Coeff 总结这个公式:
Result_x[1] = sum(Coeff_x[1]*Y[2] + Coeff_x[2]* Y[3] + ... + Coeff_x[Reps]*Y[Reps+1]) - Y[1]
Result_x[2] = sum(Coeff_x[1]*Y[3] + Coeff_x[2]* Y[4] + ... + Coeff_x[Reps]*Y[Reps+2]) - Y[2]
.
.
.
Result_x[Reps] = sum(Coeff_x[1]* Y[Reps+1] + Coeff_x[2]* Y[Reps+2] + ... + Coeff_x[Reps]*Y[Reps*2]) - Y[Reps]
所以最后,最终的总结 tibble 应该如下所示:
姓名 | 落后 | 结果_1 | ... | 结果_x |
---|---|---|---|---|
一个 | +1 | 一个号码 | 数字 | 一个号码 |
一个 | +2 | 一个号码 | 数字 | 一个号码 |
一个 | ... | 一个号码 | 数字 | 一个号码 |
一个 | 代表 | 一个号码 | 数字 | 一个号码 |
乙 | +1 | 一个号码 | 数字 | 一个号码 |
乙 | +2 | 一个号码 | 数字 | 一个号码 |
... | ... | 一个号码 | 数字 | 一个号码 |
... | 代表 | 一个号码 | 数字 | 一个号码 |
问题的动态性质使我很难用 for 循环很好地定义它,并且必须为原始 tibble 中的每一行重新索引和正确汇总的外部向量的存在使我难以使用管道.
我认为定义自定义函数可能会有所帮助,但它再次与管道代码混淆。
解决方案
按“名称”拆分“X”,在list
( map
) 上循环,同时在指定为 a 的a中创建“Y”的shift
edlead
值。循环遍历每个嵌套的'Coeff' 列,方法是获取列值的乘积,并校正相应的 'y' 长度并从'y' 的值中减去list
n
vector
list
summarise
across
list
sum
first
library(dplyr)
library(purrr)
library(data.table)
X %>%
group_split(Name) %>%
map_dfr(~ map_dfr(shift(Y, n = 1:nrow(.x), type = 'lead'),
function(y) .x %>%
summarise(Name = first(Name), across(starts_with('Coeff'),
~ sum(. * y[seq_along(.)], na.rm = TRUE) - first(y)))) ) %>%
mutate(Lag = rowid(Name))
-输出
# A tibble: 15 × 4
Name Coeffs_1 Coeffs_2 Lag
<chr> <dbl> <dbl> <int>
1 A 127. 54.4 1
2 A 162. 134. 2
3 A 127. 68.2 3
4 A 109. 38.0 4
5 A 108. 94.0 5
6 B 175. 197. 1
7 B 187. 240. 2
8 B 151. 200. 3
9 B 132. 159. 4
10 B 102. 152. 5
11 C 48.8 131. 1
12 C 89.1 128. 2
13 C 42.5 98.7 3
14 C 29.4 95.7 4
15 C 41.7 50.1 5
推荐阅读
- ssis - 在没有文件夹的情况下,Ssis 日志记录不起作用
- flutter - Flutter:图像作为具有相同滚动的webview的标题?
- .net - 在 dotnet 框架中使用 dotnet 5 库
- c# - 如何通过控制 C# 中的属性 ID 在 XML 中添加节点?
- adal - 与证书问题相关的所有 AADSTS 代码
- c++ - QTableWidget:优先考虑特定列的水平空间
- angular - 反应形式中的 NgbDatepicker with formly:设置初始值
- r - 箱线图异常值去除发现类异常值属于
- .net - JsonConverter - 实现默认“写入”的好方法
- jquery - make a field required only if a select has a specific value