我想组合数据帧并根据其中一个数据帧的值有条件地计算它们的总和。
对于下面的示例,如果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?
中执行此操作答案 0 :(得分: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
答案 1 :(得分:4)
使用@ Roland的定义:
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