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

Posted

技术标签:

【中文标题】R:变异列并放置在特定列之前并根据这些特定列命名它们【英文标题】:R: mutate columns and place before specific columns and name them based on these specific columns 【发布时间】:2021-05-22 11:44:36 【问题描述】:

假设如下数据结构:

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  

现在,对于带有 .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  

【问题讨论】:

这能回答你的问题吗? Sort columns of a dataframe by column name 【参考方案1】:

基本 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
        
      
    )
  )
)

给予

   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

【讨论】:

以上是关于R:变异列并放置在特定列之前并根据这些特定列命名它们的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:将特定功能应用于列并创建其他列

在 jpa 本机查询中选择特定列并映射到 pojo

如果列中的值小于特定值,如何转到csv文件中的特定列并打印整行

返回 Laravel 中模型的特定列并转换为 Json

如何使用 BeautifulSoup 从表中抓取特定列并作为熊猫数据框返回

如何遍历列,检查任何列中是不是存在特定值,改变新列并输入 1 如果存在,如果不存在则输入 0?