如何解决在 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(.)))
工作原理
-
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
会跟踪行号,因此当数据被转换为更长的格式时,我们不会忘记哪些值属于哪些行。 -
rowid_to_column
将分隔separate_rows
并将数据转换为更长的格式。 @Adam 建议作为改进。 -
Col1
将所有内容对齐到您指定的列中。
数据
pivot_wider
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。