根据未分类的ID填写缺失值

时间:2017-05-18 22:42:00

标签: r

我需要根据匹配的ID填写NA。但是,无法对此data.frame进行排序,以便相关NA始终在唯一ID之前(或之后)发生,因此我无法使用loc.na

很难想出一个不完整data.frame的示例,但我认为这样做..尝试排序后的示例数据:

df
id value col1
1  NA    ABC  
1  2     LMN  
2  3     RGG
2  NA    Z    
3  5     H  
4  7     QRS  

看起来像:

id value col1
1  2     ABC  
1  2     LMN  
2  3     RGG
2  3     Z    
3  5     H  
4  7     QRS  

或者有没有办法使用不依赖于排序的loc.na

2 个答案:

答案 0 :(得分:1)

df  <- read.table(header = TRUE,
                 text = "id value col1
                  1  NA    ABC  
                  1  2     LMN  
                  2  3     RGG
                  2  NA    Z    
                  3  5     H  
                  4  7     QRS  
")

首先,您可以订购数据框,例如使用包data.table:

library(data.table)
setorder(df, id, value)

> df
  id value col1
1  1    NA  ABC
2  1     2  LMN
4  2    NA    Z
3  2     3  RGG
5  3     5    H
6  4     7  QRS

如果你想要它,你可以只设置order(df,id,value,na.last = T)。 最后,您可以替换NA&#39; s:

df$value[is.na(df$value)] <- df$value[which(is.na(df$value))+1]

然后再次排序:

setorder(df, id, col1)

> print(df, row.names = F)
 id value col1
  1     2  ABC
  1     2  LMN
  2     3  RGG
  2     3    Z
  3     5    H
  4     7  QRS

答案 1 :(得分:0)

这不会起作用吗?

matching_table <- unique(df[,c("id","value"))
new_df <- merge(df[,-2],matching_table,all.x = TRUE)