如何根据第一个空格拆分 R 中的列
Posted
技术标签:
【中文标题】如何根据第一个空格拆分 R 中的列【英文标题】:How to Split Columns in R based on First Space 【发布时间】:2022-01-22 12:47:28 【问题描述】:我有这段代码在第二个空格上拆分列,但我不知道如何修改它以仅在第一个空格上拆分。我对正则表达式不太熟悉。
library(tidyr)
df <- data.frame(Location = c("San Jose CA", "Fremont CA", "Santa Clara CA"))
separate(df, Location, into = c("city", "state"), sep = " (?=[^ ]+$)")
# city state
# 1 San Jose CA
# 2 Fremont CA
# 3 Santa Clara CA
【问题讨论】:
如果您确实需要在 first 空间上拆分,那么我建议您编辑您的问题以反映这一点。您当前的问题旨在将城市与州分开,这需要在 last 空间上进行拆分。 【参考方案1】:你可以使用
library(tidyr)
df <- data.frame(Location = c("San Jose CA", "Fremont CA", "Santa Clara CA"))
df_new <- separate(df, Location, into = c("city", "state"), sep = "^\\S*\\K\\s+")
输出:
> df_new
city state
1 San Jose CA
2 Fremont CA
3 Santa Clara CA
^\S*\K\s+
正则表达式匹配
^
- 字符串开头
\S*
- 零个或多个非空白字符
\K
- 匹配重置运算符,将匹配的文本从整体匹配内存缓冲区中丢弃
\s+
- 一个或多个空格字符。
注意:如果你的字符串可以有前导空格,并且你想忽略这个前导空格,你可以在^
之后添加\\s*
并使用
sep = "^\\s*\\S+\\K\\s+"
这里,\S+
将要求在拆分字符串的空格之前至少存在一个(或多个)非空格字符。
【讨论】:
完美,谢谢!感谢您解释我正在尝试学习的正则表达式。【参考方案2】:如果你想坚持separate
,那就试试吧:
separate(df, Location, into=c("city", "state"), sep=" (?=[A-Z]2$)")
我们也可以在此处尝试使用sub
作为基本 R 选项:
df$city <- sub("\\s+[A-Z]2$", "", df$Location)
df$state <- sub("^.*\\s+", "", df$Location)
【讨论】:
谢谢,但结果相同。它在第二个空间分开。我想在第一个空格上分开。 @CrashBandicoot Check this demo 看到我在separate
调用中使用的sep
是针对正确的第二个空格。您确定要在 first 空间上拆分吗?
是的,这是我需要定位的第一个空间。我知道在这个例子的上下文中它没有多大意义以上是关于如何根据第一个空格拆分 R 中的列的主要内容,如果未能解决你的问题,请参考以下文章