R 在向量中插入缺失的自然数

R 在向量中插入缺失的自然数,r,vector,R,Vector,我有一个数据框列 df$col1=(1,2,3,4,5,6,7,8,9,...,500000) 和一个向量 vc<-c(1,2,4,5,7,8,10,...,499999) 如果我比较两个向量,第二个向量有一些缺失值,我如何在缺失值的位置0插入,例如我想要的第二个向量 vc<-c(1,2,0,4,5,0,7,8,9,10,...,499999,0) 由于@RonakShah,您可以使用匹配和替换 输入 vc <- c(1,2,4,5,7,8,10) x <- 1:1

我有一个数据框列

df$col1=(1,2,3,4,5,6,7,8,9,...,500000)
和一个向量

vc<-c(1,2,4,5,7,8,10,...,499999)
如果我比较两个向量,第二个向量有一些缺失值,我如何在缺失值的位置0插入,例如我想要的第二个向量

vc<-c(1,2,0,4,5,0,7,8,9,10,...,499999,0)
由于@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

您可以尝试使用包含所有值的较大向量作为模板,然后将零指定给与第二个较小向量不匹配的任何值:

v_out <- df$col1
v_out[!(v_out %in% vc)] <- 0
v_out

[1]  1  2  0  4  5  0  7  8  0 10
资料


使用Tim的数据,一种更神秘但可能更快的单行程序替代方案:

`[<-`(numeric(max(df$col1)),vc,vc)
#[1]  1  2  0  4  5  0  7  8  0 10

假设col1总是从1开始?我不知道可以在replace中保存一个对象,然后在condition参数中使用它。
`[<-`(numeric(max(df$col1)),vc,vc)
#[1]  1  2  0  4  5  0  7  8  0 10