2012-04-11 58 views
1

我有以下難題。我有一個數據幀X,看起來像:通過rownames將矢量結合到數據框架用零填充間隙

 v2  v3  
10 4.0  3.0 
11 5.0  3.0 
12 6.0  9.0 
13 5.0  6.0 # where 10-14 are rownames 
14 3.0  6.0 

然後datafame Y:

 value   
11 99    
13 88  #where 11,13,14 are row names 
14 33 

我想增加價值爲x匹配rownames和填充zeros.ie空白:

 v2  v3 value 
10 4.0  3.0  0 
11 5.0  3.0  99 
12 6.0  9.0  0 
13 5.0  6.0  88 
14 3.0  6.0  33 

儘管如果我必須填充新生代,也許我可以做到這一點,然後在新的y向量之後將NA改爲零。

我一直在嘗試變化rbind.fillplyr使用newDF<-do.call(rbind.fill)但我沒有達到正在制定出我希望的方式。

編輯 我把它給NAS使用 merge(x,y,all=TRUE,by='row.names')

+0

這是否http://stackoverflow.com/questions/4022046/how-to-merge-on -a-rowname-by-some-column-from-another-data-frame的幫助? – johannes 2012-04-11 12:21:16

回答

2

我會做這樣的:

y$row <- rownames(y) # add a 'helper' column for the merge function. 
x$row <- rownames(x) 
n <-merge(x,y, by='row', all=T) 
n <- n[,-1] # remove the 'helper' column 

,然後由0替換在NAS:

n[is.na(n$value),]$value = 0 

但這如果您的y/x數據框中有NAs,則會失敗或將導致錯誤的結果。

+0

謝謝我在發佈之前發現了合併函數,但非常感謝替換爲零。這將需要一些時間。 – user1322296 2012-04-11 12:34:27

0

如果它只是一列,這是另一種方法,雖然可能不是最好的一個,但一種替代方案:

x$value <- ifelse(rownames(x) %in% rownames(y), y$value, 0)