我有一个大型数据集all
:
UserKey kind_id user_name sex
1 7472505 2 Jane <NA>
2 4564687 5 Natalie F
3 4564687 2 Natalie F
4 4564687 2 Natalie F
5 4564687 5 Natalie F
6 5257695 2 Nelly F
> dim(all_orders)
[1] 104979393 4
我必须从另一个数据集dsex
(名称字典)添加新列names
:
name dsex
1 Albine F
2 Nataly F
3 Nelly F
4 Jane F
5 Miko F
> dim(names)
[1] 82187 2
匹配第一个数据集中的user_name
和字典中的name
。
我的尝试:
1。祝福和成功
get_sex <- function(input){
sex <- names[names$name==input,]$dsex
return(as.character(sex))
}
all$dsex <- sapply(all$user_name, get_sex)
它有效,但不适用于大型数据集。
2。 dplyr和data.table
names <- as.data.table(names, key = 'name')
a <- all %>% group_by(UserKey) %>% summarise(dsex = get_sex(user_name))
不适用于大型数据集。
第3。合并
allm <- merge(all, names, by.x = c('user_name'), by.y = c('name'), all.x = T, all.y = F)
好多了,但不是我的数据集(5毫升行没问题)。
那么最有效的方法是什么?