简体   繁体   English

R:如何计算可能的列组合的总和

[英]R: How to calculate the sum of the possible columns combinations

I calculated the following:我计算如下:

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']

However, I was wondering if there is a way to smooth a bit the code.但是,我想知道是否有一种方法可以使代码平滑一些。 I tried with a for statement without success.我尝试使用for语句但没有成功。

Do you have any idea?你有什么主意吗?

Thank you谢谢

We can use crossing to create all the combinations, then loop over the rows with pmap , select the columns from dataset_definition and reduce by adding ( + ) the columns我们可以使用crossing来创建所有组合,然后使用pmap遍历行, select来自dataset_definition的列并通过添加 ( + ) 列来reduce

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, .)

data数据

dataset_definitionvol <- 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")

Maybe you can try Reduce like below也许你可以像下面这样尝试Reduce

out <- list2DF(
  setNames(
    Reduce(`+`, df, accumulate = TRUE)[-1],
    paste0(names(df)[1], ".", names(df)[-1])
  )
)

which gives这使

> out
      X-5.X-4     X-5.X-3    X-5.X-2    X-5.X-1    X-5.X0     X-5.X1     X-5.X2
1 -1.44692219  0.06485897 0.01992536  0.9389027  0.882774  2.2414535  1.8264590
2  0.67107238  1.06091561 1.04472535  1.8268617  1.671066  1.5682784  1.1739885
3 -0.09730391 -0.71854449 0.22529172  0.2998567 -1.170896 -0.7832241 -0.8425375
4  2.17106215 -0.04363773 0.77758346 -1.2117682 -1.689918 -1.7437233 -0.6436980
5  0.02411938  1.14905030 1.74295162  2.3627774  2.780719  1.4036594  2.1668351
       X-5.X3     X-5.X4     X-5.X5
1  1.66193539  0.9544402  1.3525461
2  0.92062678  1.2852087  0.6731824
3 -0.14557409  0.6229588  0.9640785
4 -0.08703476 -0.1993810 -1.3287441
5  1.47807943  2.3591872  3.7922109

Dummy Data虚拟数据

> 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

Using growing seq uences to subset data, and the rowSums .使用增长的rowSums seq

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

Data:数据:

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")

In a worst case scenario, you could use apply :在最坏的情况下,您可以使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 对 R 中所有可能的列组合求和 - Sum all possible combinations of columns in R 求和 R 中不同组合的列? - sum columns with different combinations in R? 如何计算 R 中所有可能组合的比率和归一化比率? - How to calculate ratios and normalized ratios in all possible combinations in R? 如何在 r 的小标题中获取 2 列变量组合的总和 - How to get the sum of combinations of variables of 2 columns in a tibble in r R –如何计算对的组合? - R – How to calculate combinations of pairs? R:创建给定列的所有可能组合 - R: Create every possible combinations of given columns 如何计算 R 中特定列的总和并将结果放在另一列中 - How to calculate the sum of specific columns in R and make the results in a another column 如何计算不同大小的多个向量/矩阵的所有可能组合并同时求和列? - How to compute all possible combinations of multiple vectors/matrices of different sizes and sum up columns simultaneously? 如何计算R中分组数据行之间的距离和时间差的所有可能组合? - How to calculate all possible combinations of distance and time differences between grouped rows of data in R? 对于 R 中的大矩阵,如何有效地计算所有可能组合中的归一化比率? - How to calculate normalized ratios in all possible combinations efficiently for a large matrix in R?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM