我需要提取几千个人的姓氏。这些名字的长度为两个或三个单词,取决于是否有后缀。我的攻击是计算每行中的单词数,然后根据单词数执行不同的separate()
函数。下面的代码不起作用,但显示了我的想法:
customers = data.frame(names=c("Jack Quinn III", "David Powell", "Carrie Green",
"Steven Miller, Jr.", "Christine Powers", "Amanda Ramirez"))
customers |>
mutate(names_count = str_count(names, "\\w+")) |>
{
if(names_count == 2,
separate(name, c("first_name", "last_name") ),
separate(name, c("first_name", "last_name", "suffix") )
)
}
这段代码不可能工作,因为我没有解释错误消息的能力,事实上,我不确定if
语句中是否需要逗号,因为显然有函数同时使用这两个逗号。
我的想法是,我可以通过执行以下操作将名称拆分为列
df |>
mutate() to count words |>
separate() to split columns based on count
但我连最简单的if语句都无法运行。
3条答案
按热度按时间bksxznpy1#
我们可以使用
stringr
中的word
:输出:
abithluo2#
使用
str_extract
x3naxklr3#
您可以删除
if
如果你想避免额外的软件包,你可以使用R base
sub
+ regex: