将文本行分隔为数据框的列
Separating line of text into columns of a dataframe
我有一个数据框,其中的文本行如下所示:
ANTALYA (GB) ch. 1960
SHOOTIN WAR (USA) ch. 1998
LORD AT WAR (ARG) ch. 1980
全部大写的是名字,然后是()中的位置,颜色缩写,年份。名称可以是多个单词。
我想将这个单一的文本块分成每个部分:名称、位置、颜色、年份。
我已经为此奋斗了好几天,我拥有的最好的解决方案是将每个单词放在单独的列中,但只有当名称都达到一定长度时它才有效......对于我正在做的事情数据,我可以以这种形式使用它,但它看起来不太好,你知道吗?
sepdf <- df %>%
separate(pedigree, into=c("Name1", "Name2", "Loc", "Col", "Year"),
sep=" ", merge=TRUE)
我尝试通过使用“(”作为两列之间的分隔符来保留名称,但我认为 R 不喜欢我尝试使用括号作为分隔符...
如有任何建议,我们将不胜感激。
对于像您这样的更复杂的模式匹配,您可以使用 tidyr 的 extract
函数,它可以让您创建正则表达式捕获组。每组在一组括号内(()
):
library(tidyr)
extract(df, pedigree, into = c("Name", "Loc", "Col", "Year"),
regex = "^([A-Z ]+) \((.*)\) ([a-z]+\.) (\d+)$")
Name Loc Col Year
1 ANTALYA GB ch. 1960
2 SHOOTIN WAR USA ch. 1998
3 LORD AT WAR ARG ch. 1980
我在这里使用的正则表达式是:
^
字符串开头
([A-Z ]+)
第一组包含多个大写字母和spaces
\(
然后有一个 space 和一个左括号(用 \ 转义)
(.*)
第二组是括号内的任何内容
\)
后跟右括号和 space
([a-z]+\.)
第三组包含小写字母和一个点
(\d+)
然后是 space 第四组只包含数字
$
字符串结尾
我有一个数据框,其中的文本行如下所示:
ANTALYA (GB) ch. 1960
SHOOTIN WAR (USA) ch. 1998
LORD AT WAR (ARG) ch. 1980
全部大写的是名字,然后是()中的位置,颜色缩写,年份。名称可以是多个单词。 我想将这个单一的文本块分成每个部分:名称、位置、颜色、年份。 我已经为此奋斗了好几天,我拥有的最好的解决方案是将每个单词放在单独的列中,但只有当名称都达到一定长度时它才有效......对于我正在做的事情数据,我可以以这种形式使用它,但它看起来不太好,你知道吗?
sepdf <- df %>%
separate(pedigree, into=c("Name1", "Name2", "Loc", "Col", "Year"),
sep=" ", merge=TRUE)
我尝试通过使用“(”作为两列之间的分隔符来保留名称,但我认为 R 不喜欢我尝试使用括号作为分隔符...
如有任何建议,我们将不胜感激。
对于像您这样的更复杂的模式匹配,您可以使用 tidyr 的 extract
函数,它可以让您创建正则表达式捕获组。每组在一组括号内(()
):
library(tidyr)
extract(df, pedigree, into = c("Name", "Loc", "Col", "Year"),
regex = "^([A-Z ]+) \((.*)\) ([a-z]+\.) (\d+)$")
Name Loc Col Year
1 ANTALYA GB ch. 1960
2 SHOOTIN WAR USA ch. 1998
3 LORD AT WAR ARG ch. 1980
我在这里使用的正则表达式是:
^
字符串开头([A-Z ]+)
第一组包含多个大写字母和spaces\(
然后有一个 space 和一个左括号(用 \ 转义)(.*)
第二组是括号内的任何内容\)
后跟右括号和 space([a-z]+\.)
第三组包含小写字母和一个点(\d+)
然后是 space 第四组只包含数字$
字符串结尾