我想测试数据帧的每个元素是否都大于 0。如果它大于零,我们将“买入”,否则“卖出”。我用的是sapply。它分配了每个值“卖出”。我使用了以下代码。还推荐 for 循环解决方案。
df1<-sapply(df,function(x) ifelse(x>0,yes="buy",no="sell"))
如果它是一个matrix
(甚至data.frame
),使用比较运算符创建逻辑矩阵。这给出了TRUE/FALSE
值为 1/0 的逻辑矩阵。如果我们加 1,它就会变成2/1
基于该索引,我们可以替换值(在R
,索引从1开始)
df[] <- c("sell", "buy")[(df >0) + 1]
另外,在评论中,建议不要使用sapply
on matrix
as matrix
is a vector
with dim
属性和单位元素是单个元素(在data.frame
,单位是一列 - 所以如果我们使用sapply/lapply
,它循环遍历列)。在这里,它循环遍历matrix
。所以,它可能效率不高。为了matrix
, apply
with MARGIN
可以使用
df[] <- apply(df, 2, FUN = function(x) ifelse(x > 0, "sell", "buy"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)