R数据帧,如何将不完整因子合并到更大的数据帧列中?

时间:2017-10-22 22:33:01

标签: r dataframe merge missing-data

我没有在这里讨论过这个问题。

我经常处理R中的稀疏数据帧(丰富的缺失值)。我还需要将新数据合并到“主”df中,并且新数据也几乎总是稀疏的。

“老派”方法似乎是:1。在主人中创建一个新的NAs列; 2.交叉索引两个数据帧之间的密钥。 3.使用索引,仅将匹配键中的新数据值插入到主数据库中。

这种方法似乎适用于数字和字符列。

## master data frame                                                                                                                                                                                              
master = data.frame( id = 1:20, a = rnorm(20) )
master

## what you need to add                                                                                                                                                                                           
new.data = data.frame( id = 2 * 1:10, b = c(rep('a', 5), 
   rep('b', 5) ) )
new.data

## works for character, numeric                                                                                                                                                                    
try1 = master
ind = match( new.data$id, try1$id )
try1$b = NA
try1[ind, 'b'] = new.data$b
try1
str(try1)

但是,当新数据是一个因素时,这会失败:在插入过程中,因子信息会丢失,并会添加因子的数字表示。

## what you need to add is a factor                                                                                                                                                                                         
new.data = data.frame( id = 2 * 1:10, b = factor( c(rep('a', 5), 
     rep('b', 5) ), ordered = TRUE ) )
new.data

## works for character, numeric                                                                                                                                                                                   
## not factors                                                                                                                                                                                                    
try1 = master
ind = match( new.data$id, try1$id )
try1$b = NA
try1[ind, 'b'] = new.data$b
str(try1$b)

当然,可以在主数据框中重新创建因子,但这很费力且容易出错。寻找优雅,或至少非丑陋的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用npm install mocha --save-dev node_modules/.bin/mocha First.js 包中的left_join

dplyr