R中的均值/总和,如果两者都是正数,或者一个是负数

时间:2018-02-20 16:53:23

标签: r sum mean

我是R的新手并且有一个快速的问题。我有两列。列中的大多数值都是正数,有些值是0(同一行中从不存在2个负值)。如果两个值都是正值,我如何计算每行中两个值的均值,如果其中一个值为负,我如何计算总和(得到那个非负值的'平均值)?我打算尝试一个if循环,但我觉得可能有一种更简单的方法。非常感谢!

3 个答案:

答案 0 :(得分:1)

以下是@akrun建议使用data.tableifelse()的解决方案

df <- data.frame(A = sample(-100:100, 50, replace = TRUE),
                 B = sample(0:100, 50, replace = TRUE))
library(data.table)
setDT(df)[, C := ifelse(A*B > 0, rowMeans(.SD),
                        rowSums(.SD))] # assuming "there are never 2 negative values in the same row"

答案 1 :(得分:1)

假设这两个值都不是负值,这里有一个快速回答:

x <- data.frame(a=c(5,4,3,-1),b=c(2,-3,4,0))
x$c <- ifelse(x$a*x$b>0, rowMeans(x),rowSums(x))

答案 2 :(得分:0)

非常感谢你的建议。 一位朋友提出了一些略有不同且相当优雅的事 首先将两个数字相加,然后将它们除以1或2(取决于其中一个是否为0),使用

应用(cbind(X1 $ ASE_1大于0,X1 $ ASE_2大于0),1,总和)

这会增加布尔值(True + False = 1,True + True = 2,False + True = 1),提供正确的分母。