R 从列表中生成变量的每个组合

R 从列表中生成变量的每个组合,r,dplyr,tidyverse,purrr,R,Dplyr,Tidyverse,Purrr,我有一张类似这样的清单 $mpg mpg_0.01 mpg_0.25 mpg_0.5 1 0.210 5.250 10.50 2 0.210 5.250 10.50 3 0.228 5.700 11.40 4 0.214 5.350 10.70 5 0.187 4.675 9.35 6 0.181 4.525 9.05 $cyl cyl_0.01 cyl_0.25 cyl_0.5 1

我有一张类似这样的清单

$mpg
  mpg_0.01 mpg_0.25 mpg_0.5
1    0.210    5.250   10.50
2    0.210    5.250   10.50
3    0.228    5.700   11.40
4    0.214    5.350   10.70
5    0.187    4.675    9.35
6    0.181    4.525    9.05

$cyl
  cyl_0.01 cyl_0.25 cyl_0.5
1     0.06      1.5       3
2     0.06      1.5       3
3     0.04      1.0       2
4     0.06      1.5       3
5     0.08      2.0       4
6     0.06      1.5       3
我想创建一个新的列表,每个元素都是与原始列表不同的变量组合,以如下方式结束:

$`1`
  mpg_01 cyl_25
1  0.210    1.5
2  0.210    1.5
3  0.228    1.0
4  0.214    1.5
5  0.187    2.0

$`2`
  mpg_01 cyl_5
1  0.210     3
2  0.210     3
3  0.228     2
4  0.214     3
5  0.187     4

$`3`
  mpg_25 cyl_5
1  5.250     3
2  5.250     3
3  5.700     2
4  5.350     3
5  4.675     4
...
列表中变量的顺序无关紧要,因此我们只需要(mpg_01,cyl_5)或(cyl_5,mpg_01)中的一个

我认为使用
cross
from
purr
可以满足我的需要,但不需要使用列名

以下是一些示例数据:

library(tidyverse) 

df <- list(
  mpg =
    mtcars %>%
    head() %>%
    transmute(
      mpg_0.01 = mpg * 0.01,
      mpg_0.25 = mpg * 0.25,
      mpg_0.5 = mpg * 0.5
    ),
  cyl =
    mtcars %>%
    head() %>%
    transmute(
      cyl_0.01 = cyl * 0.01,
      cyl_0.25 = cyl * 0.25,
      cyl_0.5 = cyl * 0.5
    )
)
库(tidyverse)
df%
头()%>%
蜕变(
mpg_0.01=mpg*0.01,
mpg_0.25=mpg*0.25,
mpg_0.5=mpg*0.5
),
共青团=
mtcars%>%
头()%>%
蜕变(
cyl_0.01=cyl*0.01,
气缸0.25=气缸*0.25,
气缸0.5=气缸*0.5
)
)

combin\u mat我们可以在每个列表上使用
cross
,然后使用
bind\u cols

library(purrr)
df1 <- cross(df) %>% map(dplyr::bind_cols)

谢谢,但是如果我的列表有100多个元素,并且经常更改,该怎么办?必须键入
名称(df[[1]]、名称(df[[2]]、名称(df[[3]])…
@Shinobi_Atobe进行一些快速更新。。这有点复杂,但自动化程度更高。谢谢,但这并没有保留列名称啊…我明白了。我现在又重读了你的帖子。如果以后可以重命名这些列,可以吗?
library(purrr)
df1 <- cross(df) %>% map(dplyr::bind_cols)
map2(df1, cross(map(df, names)), setNames)


#[[1]]
# A tibble: 6 x 2
#   mpg_0.01 cyl_0.01
#     <dbl>    <dbl>
#1    0.21      0.06
#2    0.21      0.06
#3    0.228     0.04
#4    0.214     0.06
#5    0.187     0.08
#6    0.181     0.06

#[[2]]
# A tibble: 6 x 2
#  mpg_0.25 cyl_0.01
#     <dbl>    <dbl>
#1     5.25     0.06
#2     5.25     0.06
#3     5.7      0.04
#4     5.35     0.06
#5     4.68     0.08
#6     4.53     0.06
#...