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