如何根据 First Space 在 R 中拆分列
How to Split Columns in R based on First Space
我有这段代码可以在第二个 space 上拆分列,但我不知道如何修改它以仅在第一个 space 上拆分。我对正则表达式不太熟悉。
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
如果您想坚持使用 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)
您可以使用
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+
将要求至少一个(或多个)非空白字符存在于用于拆分字符串的空白字符之前。
我有这段代码可以在第二个 space 上拆分列,但我不知道如何修改它以仅在第一个 space 上拆分。我对正则表达式不太熟悉。
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
如果您想坚持使用 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)
您可以使用
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+
将要求至少一个(或多个)非空白字符存在于用于拆分字符串的空白字符之前。