【发布时间】:2017-10-22 22:33:00
【问题描述】:
我没有发现这里讨论的这个问题。
我经常处理 R 中的稀疏数据帧(大量缺失值)。我还需要将新数据合并到“主”df 中,而且新数据也几乎总是稀疏的。
“老派”的方法似乎是:1.在master中创建一个新的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)
当然,可以在主数据框中重新创建因子,但这会很费力并且容易出错。寻找一个优雅的,或者至少不丑陋的解决方案。
【问题讨论】:
标签: r dataframe merge missing-data