【问题标题】:Create rows in R, based on pair combinations of existing rows基于现有行的对组合在 R 中创建行
【发布时间】:2021-06-01 22:34:06
【问题描述】:

我有

col_a col_c
1 A 01001
2 B 01002
3 C 01003
4 D 01004
5 E 01005
6 F 01006

我想要

col_a col_b col_c
1 A A 01001
2 A B 01002
3 A C 01003
4 A D 01004
5 A E 01005
6 A F 01006
7 B A 01001
8 B B 01002
9 B C 01003
10 B D 01004
11 B E 01005
.. .. ..
24 F E 01005
25 F F 01006

我觉得这很简单,但现在是凌晨 4:30,我的大脑不再工作了,请帮忙。

我试过了

#Set up a fake key to join on (just a constant)
df <- df %>% mutate(k = 1) 

 #Perform the join, remove the key
main_df %>% 
  full_join(df, by = "k") %>%
 select(-k)

我也试过

df <-
merge(
  x = df,
  y = df[, c("col_a",
             "col_c")],
     by.x = "a",
     by.y = "a",
     all = TRUE
   )

  df <-
   merge(
     x = df[, c("col_a",
                     "col_c")],
     y = main_df,
     by.x = "col_a",
     by.y = "col_a",
     all.x = TRUE
   )

我已经尝试了上述解决方案的许多组合,而不仅仅是这里列出的那些。没用。

【问题讨论】:

    标签: r rows expand


    【解决方案1】:

    试试下面的代码

    out <- merge(data.frame(col_b = df$col_a), df, all = TRUE)[c("col_a", "col_b", "col_c")]
    

    out <- with(
      df,
      cbind(
        setNames(rev(expand.grid(col_a, col_a)), c("col_a","col_b")),
        col_c = rep(col_c, by = nrow(df))
      )
    )
    

    你会看到

    > out
       col_a col_b col_c
    1      A     A  1001
    2      A     B  1002
    3      A     C  1003
    4      A     D  1004
    5      A     E  1005
    6      A     F  1006
    7      B     A  1001
    8      B     B  1002
    9      B     C  1003
    10     B     D  1004
    11     B     E  1005
    12     B     F  1006
    13     C     A  1001
    14     C     B  1002
    15     C     C  1003
    16     C     D  1004
    17     C     E  1005
    18     C     F  1006
    19     D     A  1001
    20     D     B  1002
    21     D     C  1003
    22     D     D  1004
    23     D     E  1005
    24     D     F  1006
    25     E     A  1001
    26     E     B  1002
    27     E     C  1003
    28     E     D  1004
    29     E     E  1005
    30     E     F  1006
    31     F     A  1001
    32     F     B  1002
    33     F     C  1003
    34     F     D  1004
    35     F     E  1005
    36     F     F  1006
    

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 2021-04-09
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      相关资源
      最近更新 更多