2015-04-22 33 views
0

我有不同長度的兩個命名陣列:聯盟兩個數組由colnames

x = setNames(c(0.3,0.5,0.1,0.2),c(4,5,7,9)) 
y = setNames(c(0,0,0,0,0,0,0,0,0),c(2,3,4,5,6,7,8,9,10)) 

,我想聯盟(或更好:增加)他們通過他們的列名,從而導致:

2 3 4 5 6 7 8 9 10 
0.0 0.0 0.3 0.5 0.0 0.1 0.0 0.2 0.0 

也許我應該提一下,其中一個數組實際上是類table,就我所知,它與命名數組沒有什麼區別。

+1

嘗試'y [names(y)%in%names(x)] < - x;在這個例子中,'x'中的所有名字也都是'y'。是否有可能'x'中的某些名稱不在'y'中,您也希望在輸出中使用它。 – akrun

+2

@akrun它只要'y [names(x)] < - x'。如果訂單未被保留,您的解決方案可能會出錯。 – nicola

+0

@nicola是的,你是對的。我沒有檢查它。 – akrun

回答

3

您可以將元素指定爲子集而不是索引。這適用於你的例子:

y[names(x)]<-x 
    # 2 3 4 5 6 7 8 9 10 
    #0.0 0.0 0.3 0.5 0.0 0.1 0.0 0.2 0.0 
0

不是一個解決方案,而是一種解決方法。此外,這種方式你總結(add如果一個正確理解你的問題)的名稱。

數據

x = setNames(c(0.3,0.5,0.1,0.2),c(4,5,7,9)) 
y = setNames(c(1, 1, 1, 1, 1, 1, 1, 1, 1),c(2,3,4,5,6,7,8,9,10)) 

代碼

library(dplyr) 

df <- full_join(data.frame(var=x) %>% mutate(names = names(x)), 
     data.frame(var=y) %>% mutate(names = names(y))) %>% group_by(names) %>% 
     summarise(var=sum(var)) %>% arrange(as.numeric(names)) 

z <- setNames(df$var, df$names) 
z 

結果

2 3 4 5 6 7 8 9 10 
1.0 1.0 1.3 1.5 1.0 1.1 1.0 1.2 1.0