2013-02-23 161 views
3

我想合併數據幀並根據其中一個數據幀的值有條件地計算它們的總和。R中數據幀的條件總和

對於以下示例,如果df4中的某個單元格不是0,也不是NA,則該總和應爲df3 + df4,否則該總和應爲df1 + df2 + df3

> df1 
    1 2 3 
A 0 3 2 
B 1 1 0 
C 5 0 2 

> df2 
    1 2 3 
A 3 2 2 
B 4 3 4 
C 1 0 3 

> df3 
    1 2 3 
A 1 3 4 
B 3 4 3 
C 1 2 3 

的條件取決於該幀上:

> df4 
    1 2 3 
A 6 0 0 
B 0 0 NA 
C NA 4 0 

利用上述實施例中,這是預期的結果:

> dfsum 
    1 2 3 
A 7 8 8 
B 8 8 7 
C 7 6 8 

如何R中這樣做呢?

+2

您應該使用矩陣,而不是data.frames這一點。 – Roland 2013-02-23 15:08:10

回答

5
m1 <- matrix(c(0,1,5,3,1,0,2,0,2),3) 
m2 <- matrix(c(3,4,1,2,3,0,2,4,3),3) 
m3 <- matrix(c(1,3,1,3,4,2,4,3,3),3) 
m4 <- matrix(c(6,0,NA,0,0,4,0,NA,0),3) 

msum <- m3 + m4 
temp <- m1 + m2 + m3 
cond <- is.na(m4) | m4==0 

msum[cond] <- temp[cond] 

#  [,1] [,2] [,3] 
#[1,] 7 8 8 
#[2,] 8 8 7 
#[3,] 7 6 8 
+0

@agstudy'ifelse'也一樣。 – 2013-02-23 15:54:30

+0

@MatthewLundberg你是對的!重新閱讀'ifelse'幫助,有一個警告使用類似的結構'(tmp < - 是; tmp [!test] < - no [!test]; tmp)' – agstudy 2013-02-23 16:13:11

4

使用@羅蘭的定義:

ifelse(is.na(m4) | m4==0, m1+m2+m3, m3+m4) 
##  [,1] [,2] [,3] 
## [1,] 7 8 8 
## [2,] 8 8 7 
## [3,] 7 6 8