将多列粘贴在一起并编号
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
数据
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