微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 R 中,您可以将文本分隔到列以便值对齐吗?

我有一个文本值向量,例如:

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

并且我想将这些值分成相等数量的列,以便这些值在同一列中垂直对齐,NA 中存在间隙,以便我得到:

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

我怎样才能做到这一点?我试过在 dplyr 中使用“separate”函数,但这会返回错误消息,而在 splitshapestack 中使用“split”函数允许我分隔列,但它们不返回垂直对齐的值。我还尝试以与 this post 类似的方式使用 'lapply' 和 'match',但同样,我不断收到错误消息。

解决方法

您可以多次旋转数据以对齐这些值:

Stream.of(strings).collect(Collectors.joining(""));

输出

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(.)))

工作原理

  1. 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 会跟踪行号,因此当数据被转换为更长的格式时,我们不会忘记哪些值属于哪些行。
  2. rowid_to_column 将分隔 separate_rows 并将数据转换为更长的格式。 @Adam 建议作为改进。
  3. Col1 将所有内容对齐到您指定的列中。

数据

pivot_wider

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。