将字符串拆分为单词列表

Coo*_*Day 2 regex string split r

我有一个来自二手来源的数据框,其中一列中包含许多关键信息,并用空格分隔。我不能简单地使用str_split,因为一些关键信息的名称中有空格,但它们前面有一个分组变量。以下是使用食物和食物组的示例:

foo1 <- paste('FRUIT', 'Apple', 'PROTEIN', 'Chicken', 'STARCH', 'Banana Bread', 'FRUIT', 'Strawberry')
foo2 <- paste('PROTEIN', 'Pork', 'FAT', 'Butter', 'FRUIT', 'Banana', 'STARCH', 'Spaghetti')
foo3 <- paste('FRUIT', 'Strawberry', 'PROTEIN', 'Lean Steak', 'FRUIT', 'Strawberry', 'STARCH', 'Potato')

df <- rbind(foo1, foo2, foo3)
df

foo1 "FRUIT Apple PROTEIN Chicken STARCH Banana Bread FRUIT Strawberry"  
foo2 "PROTEIN Pork FAT Butter FRUIT Banana STARCH Spaghetti"             
foo3 "FRUIT Strawberry PROTEIN Lean Steak FRUIT Strawberry Starch Potato"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想要抓住的关键部分是实际的食物,但我无法分割空间,因为存在“香蕉面包”之类的东西。因此,我只能划分水果、蛋白质、淀粉或脂肪,但我想不出一个好方法来做到这一点。在我的实际表格中,仍然只有 4 个“分组”,但有超过 500 个单独的项目,因此尝试用空格映射特定的项目将是一个巨大的痛苦。以下几行不起作用:

str_split(df, c('FRUIT', 'PROTEIN', 'STARCH', 'FAT'))
str_split_fixed(df, c('FRUIT', 'PROTEIN', 'STARCH', 'FAT'), 4)
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?提前致谢。

Col*_*FAY 5

您可以使用正则表达式来做到这一点:

str_split(df, c('FRUIT|PROTEIN|STARCH|FAT'))
[[1]]
[1] ""               " Apple "        " Chicken "      " Banana Bread " " Strawberry"   

[[2]]
[1] ""           " Pork "     " Butter "   " Banana "   " Spaghetti"

[[3]]
[1] ""             " Strawberry " " Lean Steak " " Strawberry " " Potato"    
Run Code Online (Sandbox Code Playgroud)

使用粘贴中的折叠参数将您的 vec 转换为正则表达式:

paste(c('FRUIT', 'PROTEIN', 'STARCH', 'FAT'), collapse = '|')
[1] "FRUIT|PROTEIN|STARCH|FAT"
Run Code Online (Sandbox Code Playgroud)

最好的,

科林