在R中,您可以将文本与列分开以便值对齐吗?

  • 本文关键字:对齐 文本 r dplyr csv
  • 更新时间 :
  • 英文 :


我有一个文本值向量,类似于:

Col1
camel; cow; giraffe; panda; zebra
camel; giraffe; zebra
panda; zebra

我想把这些值分成相等数量的列,这样这些值就会在相同的列中垂直对齐,而NA则有空白,这样我就得到:

Col1, Col2, Col3, Col4, Col5
camel, cow, giraffe, panda, zebra
camel, NA, giraffe, NA, zebra
NA, NA, NA, panda, zebra

我怎样才能做到这一点?我试过使用"分离"功能在dplyr,但这会返回错误信息,而使用"分裂"功能在splitshapestack允许我分开列,但他们不返回垂直对齐的值。我也尝试过以类似的方式使用'lapply'和'match',但再次,我不断得到错误信息。

您可以多次调整您的数据来对齐这些值:

library(dplyr)
df %>% 
tibble::rowid_to_column("id") %>% 
tidyr::separate_rows(Col1, sep = "; ") %>% 
tidyr::pivot_wider(id_cols = id,
names_from = Col1,
values_from = Col1) %>% 
dplyr::select(-id) %>% 
magrittr::set_colnames(paste0("Col", 1:ncol(.)))
输出

Col1  Col2  Col3    Col4  Col5 
<chr> <chr> <chr>   <chr> <chr>
1 camel cow   giraffe panda zebra
2 camel NA    giraffe NA    zebra
3 NA    NA    NA      panda zebra

工作原理

  1. rowid_to_column跟踪行号,因此当数据转向更长的格式时,我们不会丢失哪些值属于哪些行。
  2. separate_rows将分离Col1并将数据枢轴转换为较长的格式。@Adam建议
  3. pivot_wider将所有内容对齐到指定的列中。

数据

structure(list(Col1 = c("camel; cow; giraffe; panda; zebra", 
"camel; giraffe; zebra", "panda; zebra")), class = "data.frame", row.names = c(NA, 
-3L))

最新更新