我有一个如下所示的数据框:
> 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
我怎样才能做到这一点?任何帮助将不胜感激
答案 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