【发布时间】:2019-12-13 16:13:43
【问题描述】:
我有一个名字列表,这些名字以凌乱的方式写在一个列中。我正在尝试从该列中提取名字、中间名和姓氏以分别存储。
为此,我从每个名称条目中提取第一个单词并将其保存为名字。然后我删除每个条目的最后一个单词和第一个单词并将其保存为中间名。然后我 gsub 从每个条目中提取最后一个单词并将其保存为姓氏。
这给了我一个问题,因为对于只输入了一个名字的条目(所以“kevin”而不是“kevin bank”),我的代码将名字保存为姓氏(“kevin kevin”)。如果原始名称条目只有 1 个单词,我尝试使用删除 lastname 列的 for 循环修复它。当我尝试这个时,所有的姓氏条目都是空的,即使是那些有姓氏的!
这是我的代码:
df <- data.frame(ego = c("linda", "wendy pralice of rivera", "bruce springsteen", "dan", "sam"))
df$firstname <- gsub("([A-Za-z]+).*", "\\1", df$ego)
df$middlename <- gsub("^\\w*\\s*", "", gsub("\\s*\\w*\\.*$", "", df$ego))
df$lastname <- gsub("^.* ([A-Za-z]+)", "\\1", df$ego)
for(n in df$ego) {
if(lengths(strsplit(n, " ")) == 1) {
df$lastname <- ""
}
}
我做错了什么?
【问题讨论】: