合并R数据框中具有相同后缀的列

kkbh8khc  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(136)

我尝试基于相同的后缀来合并列,以从表中获得如下内容:

| Forename_1 | Surname_1 | Forename_2 | Surname_2 |
| Joe        | Bloggs    | Dave       | Jones     |

字符串
对此:

| Fullname_1 | Fullname_2 |
| Joe Bloggs | Dave Jones |


我该怎么做才能到达那里?我知道我需要使用 unite() 函数,但我不确定用于识别字符串并基于此完成操作的语法。

llmtgqce

llmtgqce1#

一种方法是获取长格式的数据,在单独的列中获取后缀。我们可以合并每个后缀的值,并再次获得宽格式的数据。

library(dplyr)
library(tidyr)

df %>%
  pivot_longer(cols = everything(), names_sep = "_", 
               names_to = c("type", "suffix")) %>%
  summarise(value = paste(value, collapse = " "), .by = suffix) %>%
  pivot_wider(names_from = suffix, names_prefix = "Fullname_")

# Fullname_1 Fullname_2
#  <chr>      <chr>     
#1 Joe Bloggs Dave Jones

字符串

数据

如果在reproducible format中提供数据,则更容易提供帮助

df <- structure(list(Forename_1 = "Joe", Surname_1 = "Bloggs", 
     Forename_2 = "Dave", Surname_2 = "Jones"), row.names = c(NA, -1L), 
     class = "data.frame")

pu3pd22g

pu3pd22g2#

带有split.default的基本R选项

list2DF(
    lapply(
        split.default(df, sub(".*_", "Fullname_", names(df))),
        paste0,
        collapse = " "
    )
)

字符串

数据

> dput(df)
structure(list(Forename_1 = "Joe", Surname_1 = "Bloggs", Forename_2 = "Dave",
    Surname_2 = "Jones"), row.names = c(NA, -1L), class = "data.frame")


给予

Fullname_1 Fullname_2
1 Joe Bloggs Dave Jones

相关问题