在R中等效,乘法以相同df的另一列为条件

Mat*_*ert 1 r where

我试图基于相同data.frame的第三列(id)的值,运行data.frame列与标量A或标量B的简单乘法.不知怎的,我有一些(订单,排序?)问题 - 到目前为止结果肯定是错误的.以下是几次尝试:

mydf$result = subset(mydf,myid==123,multiplyme)*0.6 +
subset(mydf,myid==124,,multiplyme)*0.4
Run Code Online (Sandbox Code Playgroud)

我也尝试在%语法中使用%,但也没有成功.我知道我可以用MySQL作为例子并连接到R,但在这种情况下我只想在这里使用(基本)R或plyr.对于那些比我的blabla更喜欢代码的人来说,这就是我在SQL中如何做到这一点:

SELECT
MIN(CASE WHEN myid=123 THEN multiplyme*0.6 END)
MIN(CASE WHEN myid=124 THEN multiplyme*0.4 END)
FROM mytable
GROUP BY result;
Run Code Online (Sandbox Code Playgroud)

Thx提前提供任何帮助/ R代码建议!请注意,我有2个以上的ID!

Jam*_*mes 5

假设你只有123或124 myid:

mydf$result <- mydf$multiplyme * ifelse(mydf$myid==123,0.6,0.4)
Run Code Online (Sandbox Code Playgroud)

如果你有其他变量myid添加额外ifelse和默认情况.

编辑:

由于你有额外的变量myid,我将说明扩展.

mydf$result <- mydf$multiplyme * ifelse(mydf$myid==123,0.6,ifelse(mydf$myid==124,0.4,0))
Run Code Online (Sandbox Code Playgroud)

如果在defualt情况下要保留值,则可以将末尾的0更改为1 multiplyme.ifelse如果要对许多值使用不同的倍数,则可以将其扩展为语句链.

但是,正如下面的mbq评论,switch如果它开始变得笨拙,你可以使用一个语句:

mydf$result <- mydf$multiplyme * sapply(mydf$myid,function(x) switch(as.character(x),"123"=0.6,"124"=0.4))
Run Code Online (Sandbox Code Playgroud)

这可能会慢一些,因为这会在ifelse矢量化时循环.