我试图基于相同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!
假设你只有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矢量化时循环.
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |