按R

时间:2015-05-11 17:04:54

标签: r

我有一个如下所示的数据框:

> data
  Class Number
1     A      1
2     A      2
3     A      3
4     B      1
5     B      2
6     B      3
7     C      1
8     C      2
9     C      3

我有一个参考数据框:

> reference
  Class Number Value
1     A      1   0.5
2     B      3   0.3

我想加入这些数据框来创建单个数据框:

> resultdata
  Class Number Value
1     A      1   0.5
2     A      2   0.0
3     A      3   0.0
4     B      1   0.0
5     B      2   0.0
6     B      3   0.3
7     C      1   0.0
8     C      2   0.0
9     C      3   0.0

我怎样才能做到这一点?任何帮助将不胜感激

3 个答案:

答案 0 :(得分:2)

这个的基本出发点是merge

merge(data, reference, all = TRUE)
#   Class Number Value
# 1     A      1   0.5
# 2     A      2    NA
# 3     A      3    NA
# 4     B      1    NA
# 5     B      2    NA
# 6     B      3   0.3
# 7     C      1    NA
# 8     C      2    NA
# 9     C      3    NA

有很多问题说明如何将NA替换为0

答案 1 :(得分:2)

你可以做到

library(data.table)
setkey(setDT(reference), Class, Number)[data]

或者

setkey(setDT(data), Class, Number)[reference, 
              Value:= i.Value][is.na(Value), Value:=0]
#    Class Number Value
#1:     A      1   0.5
#2:     A      2   0.0
#3:     A      3   0.0
#4:     B      1   0.0
#5:     B      2   0.0
#6:     B      3   0.3
#7:     C      1   0.0
#8:     C      2   0.0
#9:     C      3   0.0

答案 2 :(得分:2)

你可以这样做:

library(dplyr)
left_join(data, reference) %>% (function(x) { x[is.na(x)] <- 0; x })

或(根据@akrun建议):

left_join(data, reference) %>% mutate(Value = replace(Value, is.na(Value), 0))

给出了:

#  Class Number Value
#1     A      1   0.5
#2     A      2   0.0
#3     A      3   0.0
#4     B      1   0.0
#5     B      2   0.0
#6     B      3   0.3
#7     C      1   0.0
#8     C      2   0.0
#9     C      3   0.0