我想在数据框中创建一个新列,该列将三个变量相乘,并除以其他三个变量。如果除法变量等于0,我想省略它们。这就是我所做的:
sm3$mult=ifelse(sm3$WS==0, (sm3$RF*sm3$EF*sm3$HD/sm3$M/sm3$ESF),
ifelse(sm3$M==0, (sm3$RF*sm3$EF*sm3$HD/sm3$WS/sm3$ESF),
ifelse(sm3$ESF==0,(sm3$RF*sm3$EF*sm3$HD/sm3$WS/sm3$M),
(sm3$RF*sm3$EF*sm3$HD/sm3$WS/sm3$M/sm3$ESF)))) 但有时不止一个除法变量等于0,所以如果是这样的话,我想把这两个都去掉。所以我试了一下,但它不起作用:
sm3$mult=ifelse(sm3$WS==0, (sm3$RF*sm3$EF*sm3$HD/sm3$M/sm3$ESF),
ifelse(sm3$M==0, (sm3$RF*sm3$EF*sm3$HD/sm3$WS/sm3$ESF),
ifelse(sm3$ESF==0,(sm3$RF*sm3$EF*sm3$HD/sm3$WS/sm3$M),
ifelse(sm3$WS==0 & sm3$M==0,(sm3$RF*sm3$EF*sm3$HD/sm3$ESF),
ifelse(sm3$WS==0 & sm3$ESF==0,(sm3$RF*sm3$EF*sm3$HD/sm3$M),
ifelse(sm3$M==0 & sm3$ESF==0,(sm3$RF*sm3$EF*sm3$HD/sm3$WS),
ifelse(sm3$WS==0 & sm3$M==0 & sm3$WS==0,(sm3$RF*sm3$EF*sm3$HD),
(sm3$RF*sm3$EF*sm3$HD/sm3$WS/sm3$M/sm3$ESF)))))))) 没有出现错误,它只是输出与上面相同的输出(这不是我想要的)。
可能有一种更简单的方法来做到这一点(我很想听一听),但我也想知道为什么'&‘不起作用,是否有什么东西可以替代。大量的谷歌搜索都没有找到任何有用的东西。非常感谢
发布于 2016-09-19 12:55:31
获取分隔列并将所有0转换为1
例如,如果您有以下数据框
a = c(2,3,4,0)
b = c(5,0,2,1)
c = c(0,4,2,3)
d = data.frame(a,b,c)
> d
a b c
1 2 5 0
2 3 0 4
3 4 2 2
4 0 1 3你想用b除以a,c用1代替b和c中的所有零
d$b[d$b==0] = 1
d$c[d$c==0] = 1
d$e = d$a/d$b/d$c结果:
> d
a b c e
1 2 5 1 0.40
2 3 1 4 0.75
3 4 2 2 1.00
4 0 1 3 0.00如果您不想修改您的列,请复制它们,进行替换,然后擦除这些副本。
https://stackoverflow.com/questions/39565488
复制相似问题