R:变异列并放置在特定列之前,并根据这些特定列命名它们

R:变异列并放置在特定列之前,并根据这些特定列命名它们,r,R,假设以下数据结构: structure(list(`1.a` = c("a", NA, "a"), `1.b` = c("b", "b", NA ), `2` = c("ba", "ba", "ab"), `3.a` = c("a", "a", NA), `3.b` = c("b", NA, &q

假设以下数据结构:

structure(list(`1.a` = c("a", NA, "a"), `1.b` = c("b", "b", NA
), `2` = c("ba", "ba", "ab"), `3.a` = c("a", "a", NA), `3.b` = c("b", 
NA, "b")), row.names = c(NA, -3L), class = c("tbl_df", "tbl", 
"data.frame"))

# A tibble: 3 x 5
  `1.a` `1.b` `2`   `3.a` `3.b`
  <chr> <chr> <chr> <chr> <chr>
1 a     b     ba    a     b    
2 NA    b     ba    a     NA   
3 a     NA    ab    NA    b  

结构(列表(`1.a`=c(“a”,NA,“a”),`1.b`=c(“b”,“b”,NA ),`2`=c(“ba”,“ba”,“ab”),`3.a`=c(“a”,“a”,NA),`3.b`=c(“b”, NA,“b”)),row.names=c(NA,-3L),class=c(“tbl_df”,“tbl”, “data.frame”)) #一个tibble:3x5 `1.a``1.b``2``3.a``3.b` 1 a b ba a b 2不适用b不适用a不适用 3 a NA ab NA b 现在,对于带有.a等的列,我想在.a列前面创建一个名为X的列(点之前的部分/编号),并将单元格值粘贴在一起,保持“顺序”。我想要的结果是:

# A tibble: 3 x 7
  `1`   `1.a` `1.b` `2`   `3`   `3.a` `3.b`
  <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 ab    a     b     ab    ab    a     b    
2 b     NA    b     a     a     a     NA   
3 a     a     NA    b     b     NA    b  

#一个tible:3 x 7
`1``1.a``1.b``2``3.a``3.b```
1 ab a b ab a b
2 b不适用b a不适用
3 a不适用b不适用b
基本R选项

do.call(
  cbind,
  unname(
    lapply(
      split.default(df, gsub("\\..*", "", names(df))),
      function(x) {
        if (length(x) > 1) {
          cbind(
            setNames(
              data.frame(
                apply(x, 1, function(v) paste0(na.omit(unlist(v)), collapse = ""))
              ),
              unique(gsub("\\..*", "", names(x)))
            ),
            x
          )
        } else {
          x
        }
      }
    )
  )
)
给予

11.a1.b23.a3.b
1 ab a b ba ab a b
2 b ba a a
3 a ab b

这是否回答了您的问题?
   1  1.a  1.b  2  3  3.a  3.b
1 ab    a    b ba ab    a    b
2  b <NA>    b ba  a    a <NA>
3  a    a <NA> ab  b <NA>    b