【问题标题】:R data frames, how to merge incomplete factor into larger data frame column?R数据框,如何将不完整的因素合并到更大的数据框列中?
【发布时间】: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


    【解决方案1】:

    您可以使用dplyr 包中的left_join

    master %>%
      left_join(new.data, by = "id")
    

    【讨论】:

    • 谢谢。 dplyr 在处理因素方面比老式的 R 方法表现得更好。尽管我在尝试在函数中使用 dplyr 后最初感到懊恼/拒绝,但我现在会回到它。我认为 Hadley 改善了一些之前让我发疯的行为。
    猜你喜欢
    • 2013-06-15
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2014-12-21
    • 2016-03-21
    • 1970-01-01
    相关资源
    最近更新 更多