2个数据框,2种不同风格的命名同一个人,如何让它们相似?
2 data frames, 2 different styles of naming the same person, how to make them similar?
我有两个数据集。在一个数据集中,名字、名字和姓氏写在不同的变量中。
例如:
ID firstname second name last name
12 john arnold doe
14 jerry k wildlife
在第二个中,它们写在一个变量中:
ID name
12 john arnold doe
14 jerry k wildlife
现在我希望能够在数据集一(单独的姓名)中找到数据集二(全名)中的这些人。
我遇到的几个问题是:
- 并非所有名称都出现在两个数据集中,
- 并非所有名字都有中间名首字母,
- 并不是所有的名字都有 ID,所以我也不能单独搜索它。
所以问题是,有人可以建议一个命令来拆分 first/second/last 名称中的名称吗?其次有人知道如何使用简单的命令搜索这些名称,例如:
df<-df.old[grepl("firstname", df.old$firstname, ignore.cases=T) & grepl("secondname", df.old$secondname,ignore.cases=T) & grepl("lastname", df.old$lastname, ignore.cases=T),]
有什么建议吗?
德克
试试这个:
*样本数据*
df2 <- data.frame(ID=c(12, 14), name=c("john arnold doe", "jerry k wildlife"))
按 space
拆分名称
df2 <- cbind(df2$ID, data.frame(do.call(rbind, strsplit(as.character(df2$name), " "))))
names(df2) <- c("ID", "firstname", "second name", "last name")
df2
按名字和姓氏或 ID 连接两个数据框。
您可以使用 tidyr
包中的 separate
。
separate(df2, name, into=c("firstname", "secondname", "last name"), " ")
# ID firstname secondname last name
#1 12 john arnold doe
#2 14 jerry k wildlife
对于缺失的中间名,如果姓氏可以归类为中间名,
df2 <- data.frame(ID=c(12, 14), name=c("john arnold doe", "jerry wildlife"))
library(splitstackshape)
cSplit(df2, 2, sep = " ")# this reads "split 2nd column by white space"
# ID name_1 name_2 name_3
#1: 12 john arnold doe
#2: 14 jerry wildlife NA
name_1
对应first name
,name_2
对应middle name
我有两个数据集。在一个数据集中,名字、名字和姓氏写在不同的变量中。 例如:
ID firstname second name last name
12 john arnold doe
14 jerry k wildlife
在第二个中,它们写在一个变量中:
ID name
12 john arnold doe
14 jerry k wildlife
现在我希望能够在数据集一(单独的姓名)中找到数据集二(全名)中的这些人。 我遇到的几个问题是:
- 并非所有名称都出现在两个数据集中,
- 并非所有名字都有中间名首字母,
- 并不是所有的名字都有 ID,所以我也不能单独搜索它。
所以问题是,有人可以建议一个命令来拆分 first/second/last 名称中的名称吗?其次有人知道如何使用简单的命令搜索这些名称,例如:
df<-df.old[grepl("firstname", df.old$firstname, ignore.cases=T) & grepl("secondname", df.old$secondname,ignore.cases=T) & grepl("lastname", df.old$lastname, ignore.cases=T),]
有什么建议吗?
德克
试试这个:
*样本数据*
df2 <- data.frame(ID=c(12, 14), name=c("john arnold doe", "jerry k wildlife"))
按 space
拆分名称df2 <- cbind(df2$ID, data.frame(do.call(rbind, strsplit(as.character(df2$name), " "))))
names(df2) <- c("ID", "firstname", "second name", "last name")
df2
按名字和姓氏或 ID 连接两个数据框。
您可以使用 tidyr
包中的 separate
。
separate(df2, name, into=c("firstname", "secondname", "last name"), " ")
# ID firstname secondname last name
#1 12 john arnold doe
#2 14 jerry k wildlife
对于缺失的中间名,如果姓氏可以归类为中间名,
df2 <- data.frame(ID=c(12, 14), name=c("john arnold doe", "jerry wildlife"))
library(splitstackshape)
cSplit(df2, 2, sep = " ")# this reads "split 2nd column by white space"
# ID name_1 name_2 name_3
#1: 12 john arnold doe
#2: 14 jerry wildlife NA
name_1
对应first name
,name_2
对应middle name