2016-09-12 4 views
0

У меня есть именованный вектор (скажем n) с именами как последовательные целые числа от 1 до 25000, а также значения, связанные с ним, и другой меньший вектор (например, m), похожий на " n ", с 21399 элементами, с именами, начинающимися с 1 и заканчивающимися на 25000.Как добавить именованные элементы в вектор в R

Я хочу добавить именованные элементы в вектор« m »для отсутствующих имен и присвоить им значение 0.

Я сделал это, создав два кадра данных с именами и значениями в качестве двух столбцов для обоих, а затем выполнив левое соединение, но есть ли какие-либо более эффективные способы его выполнения?

Гораздо меньше пример:

> n=c("1"=3,"2"=5,"3"=2,"4"=9,"5"=8) 
> n 
1 2 3 4 5 
3 5 2 9 8 
> m=c("1"=9,"2"=7,"5"=2) 
> m 
1 2 5 
9 7 2 

Я хочу, чтобы мой последний "м", чтобы быть:

> m 
1 2 3 4 5 
9 7 0 0 2 

Что я сделал:

> x=data.frame("p"=names(n),n) 
> y=data.frame("p"=names(m),m) 
> join(x,y,by="p") 
    p n m 
1 1 3 9 
2 2 5 7 
3 3 2 0 
4 4 9 0 
5 5 8 2 
+0

Пожалуйста, добавьте пример [воспроизводимый] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), чтобы люди могли вам помочь. –

+0

Как связаны 'n' и' m'? Вы в основном хотите, чтобы вся потерянная последовательность имен со значением 0. –

+0

«n» и «m» имеют одинаковый диапазон имен –

ответ

2

Несколько попыток:

m[setdiff(names(n), names(m))] <- 0 
m[order(as.numeric(names(m)))] 
#1 2 3 4 5 
#9 7 0 0 2 

m <- c(m,replace(n,,0)) 
tapply(m, names(m), sum) 
#1 2 3 4 5 
#9 7 0 0 2 

replace(replace(n,,0), match(names(m),names(n)), m) 
#1 2 3 4 5 
#9 7 0 0 2 

С NA с вместо 0-х:

setNames(m[match(names(n),names(m))], names(n)) 
# 1 2 3 4 5 
# 9 7 NA NA 2 
+0

К 5 секундам вы избили меня ... :-) – r2evans

0

Мы можем использовать этот

x=data.frame("p"=names(n),n) 
y=data.frame("p"=names(m),m) 


merged = merge (x , y, by ="p", all.x = TRUE) 

и заменить "NA" с нуля, мы имеем

merged[is.na(merged)] <- 0 

выход

p n m 
    1 1 3 9 
    2 2 5 7 
    3 3 2 0 
    4 4 9 0 
    5 5 8 2 
Смежные вопросы