如何根据 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+ 将要求至少一个(或多个)非空白字符存在于用于拆分字符串的空白字符之前。