r - R按位置将字符串列分成两列
问题描述
我有一个与这里讨论的问题非常相似的问题:Split data frame string column into multiple columns 但是,给定以下数据框:
before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))
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
末尾 ( ) 捕获具有组位置锚点的$
组,其中第 2 组和第 3 组中有两个字符,而第 1 组可以灵活
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
或另一种选择是反转字符串并使用位置,sep
如separate
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"))
推荐阅读
- javascript - 如何在 vue js 中监听“root”发出的事件?
- python - 我想在 GENRE 列中为所有包含特定字符串或使用 pandas 以“Sp”开头的电影返回“Action”
- m2doc - 使用 M2Doc 核心生成 API 和 SiriusServices 出现问题
- r - 在另一个 par 中使用 par
- google-bigquery - 如何使 BigQuery 中的预定查询不那么冗长?
- python - 递增列表程序未正确递增列表,需要帮助
- angular - 带有验证的自定义模板
- angular - npm install of angular throws 错误:ENOTEMPTY
- c# - 错误 CS0246:找不到类型或命名空间名称“Npgsql”(您是否缺少 using 指令或程序集引用?)
- jquery - 如何最初在 swiper 中隐藏延迟加载的图像