我有一个数据框列
df$col1=(1,2,3,4,5,6,7,8,9,...,500000)
和向量
vc<-c(1,2,4,5,7,8,10,...,499999)
如果我比较两个向量,则第二个向量具有一些缺失值,我如何将其插入缺失值的位置0s,例如,我想成为的第二个向量
vc<-c(1,2,0,4,5,0,7,8,9,10,...,499999,0)
答案 0 :(得分:2)
您可以使用match
和replace
(感谢@RonakShah)
输入
vc <- c(1,2,4,5,7,8,10)
x <- 1:15
结果
out <- replace(tmp <- vc[match(x, vc)], is.na(tmp), 0L)
out
# [1] 1 2 0 4 5 0 7 8 0 10 0 0 0 0 0
答案 1 :(得分:1)
您可以尝试使用包含所有值的较大向量作为模板,然后将零个与第二个较小向量不匹配匹配的值赋零:
v_out <- df$col1
v_out[!(v_out %in% vc)] <- 0
v_out
[1] 1 2 0 4 5 0 7 8 0 10
数据
df$col1 <- c(1:10)
vc <- c(1,2,4,5,7,8,10)
答案 2 :(得分:1)
一种更神秘,但可能更快的单线替代方法(使用蒂姆的数据):
`[<-`(numeric(max(df$col1)),vc,vc)
#[1] 1 2 0 4 5 0 7 8 0 10