我有一个与此处讨论的问题非常相似的问题:Split data frame string column into multiple columns 但是,给定以下数据框:
before = data.frame(attr = c(1,30,4), Name=c('George','Mark','Susan'))
attr Name
1 1 George
2 30 Mark
3 4 Susan
我需要将“名称”列拆分为 2 个字符的倍数。 预期结果应该是:
attr Split1 Split2 Split3
1 1 Ge or ge
2 30 Ma rk
3 4 S us an
老实说,我现在知道如何使用 dplyr 单独功能来实现这一目标。 感谢您的帮助。
最佳答案
我们可以使用 extract
来捕获在第二组和第三组中包含两个字符的字符串末尾具有组位置 anchor ($
) 的组,而第一个组可以灵活一点
library(stringr)
library(dplyr)
library(tidyr)
df1 %>%
extract(Name, into = str_c("Split", 1:3), "(.*?)(..)(..)$")
# attr Split1 Split2 Split3
#1 1 Ge or ge
#2 30 Ma rk
#3 4 S us an
或者另一个选项是反转字符串并将位置用作separate
sep
library(stringi)
df1 %>%
mutate(Name = stri_reverse(Name)) %>%
separate(Name, into = str_c("Split", 3:1), sep=c(2, 4)) %>%
mutate(across(starts_with("Split"), stri_reverse)) %>%
select(attr, Split1:Split3)
数据
df1 <- structure(list(attr = c(1L, 30L, 4L), Name = c("George", "Mark",
"Susan")), class = "data.frame", row.names = c("1", "2", "3"))
关于R 按位置将字符串列分成两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62563564/