我需要根据匹配的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
?
答案 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)