R:如何计算可能的列组合的总和
我计算如下:R:如何计算可能的列组合的总和,r,sum,combinations,R,Sum,Combinations,我计算如下: dataset_definitivo1['CAR-5-4'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] dataset_definitivo1['CAR-5-3'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] dataset_definitivo1['CAR-5
dataset_definitivo1['CAR-5-4'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4']
dataset_definitivo1['CAR-5-3'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3']
dataset_definitivo1['CAR-5-2'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] + dataset_definitivo1['AR -2']
dataset_definitivo1['CAR-5-1'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] + dataset_definitivo1['AR -2'] + dataset_definitivo1['AR -1']
dataset_definitivo1['CAR-5 0'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] + dataset_definitivo1['AR -2'] + dataset_definitivo1['AR -1'] + dataset_definitivo1['AR 0']
dataset_definitivo1['CAR-5 1'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] + dataset_definitivo1['AR -2'] + dataset_definitivo1['AR -1'] + dataset_definitivo1['AR 0'] + dataset_definitivo1['AR 1']
dataset_definitivo1['CAR-5 2'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] + dataset_definitivo1['AR -2'] + dataset_definitivo1['AR -1'] + dataset_definitivo1['AR 0'] + dataset_definitivo1['AR 1'] + dataset_definitivo1['AR 2']
dataset_definitivo1['CAR-5 3'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] + dataset_definitivo1['AR -2'] + dataset_definitivo1['AR -1'] + dataset_definitivo1['AR 0'] + dataset_definitivo1['AR 1'] + dataset_definitivo1['AR 2'] + dataset_definitivo1['AR 3']
dataset_definitivo1['CAR-5 4'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] + dataset_definitivo1['AR -2'] + dataset_definitivo1['AR -1'] + dataset_definitivo1['AR 0'] + dataset_definitivo1['AR 1'] + dataset_definitivo1['AR 2'] + dataset_definitivo1['AR 3'] + dataset_definitivo1['AR 4']
dataset_definitivo1['CAR-5 5'] = dataset_definitivo1['AR -5'] + dataset_definitivo1['AR -4'] + dataset_definitivo1['AR -3'] + dataset_definitivo1['AR -2'] + dataset_definitivo1['AR -1'] + dataset_definitivo1['AR 0'] + dataset_definitivo1['AR 1'] + dataset_definitivo1['AR 2'] + dataset_definitivo1['AR 3'] + dataset_definitivo1['AR 4'] + dataset_definitivo1['AR 5']
然而,我想知道是否有一种方法可以使代码平滑一点。我尝试使用for
语句,但没有成功
你知道吗
谢谢我们可以使用
交叉
创建所有组合,然后使用pmap
循环行,选择数据集定义中的列
并通过添加(+
)列来减少
library(dplyr)
library(tidyr)
library(purrr)
library(stringr)
tmp <- crossing(col1 = -5:5, col2 = -5:5)
nm1 <- paste0("CAR", do.call(paste, tmp))
dataset_definitionvol2 <- tmp %>%
pmap_dfc(~ dataset_definitionvol %>%
select(str_c('AR ', .x:.y)) %>%
reduce(`+`)) %>%
rename_all(~ nm1) %>%
bind_cols(dataset_definitionvol, .)
库(dplyr)
图书馆(tidyr)
图书馆(purrr)
图书馆(stringr)
tmp%
减少(`+`))%>%
重命名所有(~nm1)%>%
绑定(数据集定义卷)
数据
dataset\u definitionvol也许您可以尝试Reduce
如下
out <- list2DF(
setNames(
Reduce(`+`, df, accumulate = TRUE)[-1],
paste0(names(df)[1], ".", names(df)[-1])
)
)
虚拟数据
> dput(df)
structure(list(`X-5` = c(-0.626453810742332, 0.183643324222082,
-0.835628612410047, 1.59528080213779, 0.329507771815361), `X-4` = c(-0.820468384118015,
0.487429052428485, 0.738324705129217, 0.575781351653492, -0.305388387156356
), `X-3` = c(1.51178116845085, 0.389843236411431, -0.621240580541804,
-2.2146998871775, 1.12493091814311), `X-2` = c(-0.0449336090152309,
-0.0161902630989461, 0.943836210685299, 0.821221195098089, 0.593901321217509
), `X-1` = c(0.918977371608218, 0.782136300731067, 0.0745649833651906,
-1.98935169586337, 0.61982574789471), X0 = c(-0.0561287395290008,
-0.155795506705329, -1.47075238389927, -0.47815005510862, 0.417941560199702
), X1 = c(1.35867955152904, -0.102787727342996, 0.387671611559369,
-0.0538050405829051, -1.37705955682861), X2 = c(-0.41499456329968,
-0.394289953710349, -0.0593133967111857, 1.10002537198388, 0.763175748457544
), X3 = c(-0.164523596253587, -0.253361680136508, 0.696963375404737,
0.556663198673657, -0.68875569454952), X4 = c(-0.70749515696212,
0.36458196213683, 0.768532924515416, -0.112346212150228, 0.881107726454215
), X5 = c(0.398105880367068, -0.612026393250771, 0.341119691424425,
-1.12936309608079, 1.43302370170104)), class = "data.frame", row.names = c(NA,
-5L))
> df
X-5 X-4 X-3 X-2 X-1 X0
1 -0.6264538 -0.8204684 1.5117812 -0.04493361 0.91897737 -0.05612874
2 0.1836433 0.4874291 0.3898432 -0.01619026 0.78213630 -0.15579551
3 -0.8356286 0.7383247 -0.6212406 0.94383621 0.07456498 -1.47075238
4 1.5952808 0.5757814 -2.2146999 0.82122120 -1.98935170 -0.47815006
5 0.3295078 -0.3053884 1.1249309 0.59390132 0.61982575 0.41794156
X1 X2 X3 X4 X5
1 1.35867955 -0.4149946 -0.1645236 -0.7074952 0.3981059
2 -0.10278773 -0.3942900 -0.2533617 0.3645820 -0.6120264
3 0.38767161 -0.0593134 0.6969634 0.7685329 0.3411197
4 -0.05380504 1.1000254 0.5566632 -0.1123462 -1.1293631
5 -1.37705956 0.7631757 -0.6887557 0.8811077 1.4330237
使用增长的seq
uences来子集数据,以及行和
setNames(as.data.frame(sapply(Map(seq, 1:ncol(d))[-1], function(x) rowSums(d[x]))),
paste("CAR-5", -4:5))
# CAR-5 -4 CAR-5 -3 CAR-5 -2 CAR-5 -1 CAR-5 0 CAR-5 1 CAR-5 2
# 1 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422
# 2 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422
# 3 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422
# CAR-5 3 CAR-5 4 CAR-5 5
# 1 1.539768 1.549768 1.558032
# 2 1.539768 1.549768 1.558032
# 3 1.539768 1.549768 1.558032
数据:
d在最坏的情况下,您可以使用apply
:
setNames(data.frame(t(apply(df, 1, cumsum))), paste("CAR-5", -5:5))
CAR-5 -5 CAR-5 -4 CAR-5 -3 CAR-5 -2 CAR-5 -1 CAR-5 0 CAR-5 1 CAR-5 2 CAR-5 3 CAR-5 4 CAR-5 5
1 1 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422 1.539768 1.549768 1.558032
2 1 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422 1.539768 1.549768 1.558032
3 1 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422 1.539768 1.549768 1.558032
谢谢,它确实起了作用:)谢谢,它确实起了作用:)谢谢,它确实起了作用:)谢谢,它确实起了作用:)谢谢,它确实起了作用:)
setNames(as.data.frame(sapply(Map(seq, 1:ncol(d))[-1], function(x) rowSums(d[x]))),
paste("CAR-5", -4:5))
# CAR-5 -4 CAR-5 -3 CAR-5 -2 CAR-5 -1 CAR-5 0 CAR-5 1 CAR-5 2
# 1 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422
# 2 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422
# 3 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422
# CAR-5 3 CAR-5 4 CAR-5 5
# 1 1.539768 1.549768 1.558032
# 2 1.539768 1.549768 1.558032
# 3 1.539768 1.549768 1.558032
d <- structure(list(`AR -5` = c(1, 1, 1), `AR -4` = c(0.25, 0.25,
0.25), `AR -3` = c(0.111111111111111, 0.111111111111111, 0.111111111111111
), `AR -2` = c(0.0625, 0.0625, 0.0625), `AR -1` = c(0.04, 0.04,
0.04), `AR 0` = c(0.0277777777777778, 0.0277777777777778, 0.0277777777777778
), `AR 1` = c(0.0204081632653061, 0.0204081632653061, 0.0204081632653061
), `AR 2` = c(0.015625, 0.015625, 0.015625), `AR 3` = c(0.0123456790123457,
0.0123456790123457, 0.0123456790123457), `AR 4` = c(0.01, 0.01,
0.01), `AR 5` = c(0.00826446280991736, 0.00826446280991736, 0.00826446280991736
)), row.names = c(NA, -3L), class = "data.frame")
setNames(data.frame(t(apply(df, 1, cumsum))), paste("CAR-5", -5:5))
CAR-5 -5 CAR-5 -4 CAR-5 -3 CAR-5 -2 CAR-5 -1 CAR-5 0 CAR-5 1 CAR-5 2 CAR-5 3 CAR-5 4 CAR-5 5
1 1 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422 1.539768 1.549768 1.558032
2 1 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422 1.539768 1.549768 1.558032
3 1 1.25 1.361111 1.423611 1.463611 1.491389 1.511797 1.527422 1.539768 1.549768 1.558032