将多列粘贴在一起并编号

Paste multiple columns together and numbering

数据

row1=c("A","B","C")
row2=c("D","E",NA)
df=data.frame(rbind(row1,row2))
df
     X1 X2 X3
row1  A  B  C
row2  D  E  NA

我要2row & 1col数据框,数据类型为字符

例如,

"1. A - 2. B - 3. C"
"1. D - 2. E"

除了使用循环还有其他方法吗?

我看到了 tidyr::unite、do.call、sprintf、... 但是我的情况很难申请。

实际数据的维度更大。实际数据超过10列。

我们可以这样做:

library(tidyverse)

df %>% 
  mutate(across(starts_with("X"), ~ paste0(parse_number(cur_column()), ". ", .), .names = 'new_{col}')) %>% 
  unite(New_Col, starts_with('new'), na.rm = TRUE, sep = ' - ') %>% 
  mutate(New_Col = str_replace(New_Col, ' \- \d{1,2}\. NA', '')) %>% 
  select(New_Col) %>% 
  as_tibble()
 New_Col           
  <chr>             
1 1. A - 2. B - 3. C
2 1. D - 2. E