用另一个 DF 的值替换一个 DF 中的 NA
Replace NAs in one DF with values from another DF
我有一个包含一些缺失值的 df:
df <- data.frame(key = c('ID1','ID2','ID3','ID4','ID5'),
a = c(7,3,5,7,5),
b = c(1,7,5,7,4),
c = c(1,NA,NA,4,1),
d = c(8,NA,NA,7,6))
我创建了第二个 df,其中包含我想插入到间隙中的值:
to_insert <- data.frame(key = c('ID2','ID3'),
c = c(4,5),
d = c(1,1))
我将如何进行合并?如果我尝试完全外部联接,我会得到重复的列:
merge(df,to_insert,by="key",all=TRUE)
给出这个:
key a b c.x d.x c.y d.y
1 ID1 7 1 1 8 NA NA
2 ID2 3 7 NA NA 4 1
3 ID3 5 5 NA NA 5 1
4 ID4 7 7 4 7 NA NA
5 ID5 5 4 1 6 NA NA
当我想要这样的时候:
key a b c d
1 ID1 7 1 1 8
2 ID2 3 7 4 1
3 ID3 5 5 5 1
4 ID4 7 7 4 7
5 ID5 5 4 1 6
您宁愿替换也不愿合并。尝试使用 match
.
df[match(to_insert$key, df$key), match(names(to_insert), names(df))] <- to_insert
df
# key a b c d
# 1 ID1 7 1 1 8
# 2 ID2 3 7 4 1
# 3 ID3 5 5 5 1
# 4 ID4 7 7 4 7
# 5 ID5 5 4 1 6
我有一个包含一些缺失值的 df:
df <- data.frame(key = c('ID1','ID2','ID3','ID4','ID5'),
a = c(7,3,5,7,5),
b = c(1,7,5,7,4),
c = c(1,NA,NA,4,1),
d = c(8,NA,NA,7,6))
我创建了第二个 df,其中包含我想插入到间隙中的值:
to_insert <- data.frame(key = c('ID2','ID3'),
c = c(4,5),
d = c(1,1))
我将如何进行合并?如果我尝试完全外部联接,我会得到重复的列:
merge(df,to_insert,by="key",all=TRUE)
给出这个:
key a b c.x d.x c.y d.y
1 ID1 7 1 1 8 NA NA
2 ID2 3 7 NA NA 4 1
3 ID3 5 5 NA NA 5 1
4 ID4 7 7 4 7 NA NA
5 ID5 5 4 1 6 NA NA
当我想要这样的时候:
key a b c d
1 ID1 7 1 1 8
2 ID2 3 7 4 1
3 ID3 5 5 5 1
4 ID4 7 7 4 7
5 ID5 5 4 1 6
您宁愿替换也不愿合并。尝试使用 match
.
df[match(to_insert$key, df$key), match(names(to_insert), names(df))] <- to_insert
df
# key a b c d
# 1 ID1 7 1 1 8
# 2 ID2 3 7 4 1
# 3 ID3 5 5 5 1
# 4 ID4 7 7 4 7
# 5 ID5 5 4 1 6