我是R的新手并且有一个快速的问题。我有两列。列中的大多数值都是正数,有些值是0(同一行中从不存在2个负值)。如果两个值都是正值,我如何计算每行中两个值的均值,如果其中一个值为负,我如何计算总和(得到那个非负值的'平均值)?我打算尝试一个if循环,但我觉得可能有一种更简单的方法。非常感谢!
答案 0 :(得分:1)
以下是@akrun建议使用data.table
和ifelse()
的解决方案
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),提供正确的分母。