2013-03-18 48 views
2

我有不同长度的2个载体:rbind不同长度的2个矢量,通过他们的名字

vec1 <- rnorm(18, mean = 0.0018, sd = 0.0001) 
names(vec1) <- c("CSF", "D10", "D13", "D16", "D18", "D1", "D21", "D22", "D3", "D5", "D7", "D8", "FGA", "PD", "PE", "TH", "TP", "vWA") 

vec2 <- rnorm(20, mean = 0.0022, sd = 0.0002) 
names(vec2) <- c("CSF", "D10", "D12", "D13", "D16", "D18", "D19", "D1", "D21", "D22", "D2", "D2S", "D3", "D5", "D7", "D8", "FGA", "TH", "TP", "vWA") 

我需要他们的名字rbind这些载体。当一个向量中的名字不存在于另一个向量中时,这应该产生一个NA。

有没有简单的方法来做到这一点?

回答

5

我觉得更容易处理data.frames而不是矢量。我会做这样的事情:

merge(stack(vec1), stack(vec2), by="ind", all=TRUE) 

# ind values.x values.y 
# 1 CSF 0.001904712 0.001969627 
# 2 D1 0.001794500 0.002450328 
# 3 D10 0.001761172 0.002144368 
# 4 D13 0.001792968 0.002037505 
# 5 D16 0.001715555 0.002240566 
# 6 D18 0.001770989 0.002459609 
# 7 D21 0.001697098 0.002292614 
# 8 D22 0.001673249 0.002057277 
# 9 D3 0.001824599 0.002025163 
# 10 D5 0.001762133 0.002066801 
# 11 D7 0.001938889 0.002218919 
# 12 D8 0.001804742 0.001930666 
# 13 FGA 0.001723325 0.002153777 
# 14 PD 0.001864792   NA 
# 15 PE 0.001581331   NA 
# 16 TH 0.001803464 0.002136557 
# 17 TP 0.001737948 0.002294142 
# 18 vWA 0.001681773 0.002168390 
# 19 D12   NA 0.001907538 
# 20 D19   NA 0.002243354 
# 21 D2   NA 0.002040115 
# 22 D2S   NA 0.002230522 
+0

阿伦rbind.fill使用:我不知道'堆栈'!无法相信它。谢谢+1 – statquant 2013-03-18 21:04:11

+0

是的,谢谢你们!我也不知道关于堆栈! – vitor 2013-03-18 21:13:38

3

试试这个,最好使用data.frame

df1 = data.frame(v=vec1,n=names(vec1)) 
df2 = data.frame(v=vec2,n=names(vec2)) 
df = merge(df1,df2,by="n",all=TRUE) 
> head(df) 
    n   v.x   v.y 
1 CSF 0.001772553 0.001985266 
2 D1 0.001818434 0.001974980 
3 D10 0.001658625 0.002339643 
4 D13 0.001877724 0.002099361 
5 D16 0.001738895 0.002249619 
6 D18 0.001691192 0.002274924 
1

您可以从plyr

library(plyr) 
# convert to a list of lists 
ll <- lapply(list(vec1, vec2), function(x){as.data.frame(as.list(x))}) 
bigdf <- rbind.fill(ll) 
+1

mnel,我得到错误,所有输入必须是'data.frame's。 '错误:rbind.fill的所有输入都必须是data.frames'。 – Arun 2013-03-18 21:08:53

+0

嗯。从电话,未经测试。编辑。 – mnel 2013-03-18 21:13:46