r - 在 ifelse 语句中使用来自 dplyr 的 ntile
问题描述
我正在尝试使用 ntile(来自 dplyr)将一些数据分割成“n”个相等的桶,分别用于同一 data.table 列中的负值和正值。
我将通过一个简单的例子来说明我的意思:
require(data.table)
require(dplyr)
Buckets <- 3
Check <- data.table(a = sample(-30:30,30))
Check[a < 0,Test := ntile(a[a < 0],Buckets) * -1]
Check[a >= 0,Test := ntile(a[a >= 0],Buckets)]
当我执行测试以查看存储桶是否正常(即不重叠)时,您可以看到它已签出:
Check[,range(a),by = Test][order(Test)]
我想将上述内容合并到 data.table “Check”中的一个 ifelse 语句中,因为在实践中,我将在多个列上执行这些计算,并且大于或小于 0 的行将因列而异。因此,我更愿意只对列进行操作,而不是按照原始代码分别按行进行子集化并为每一列重复它。
当我尝试执行以下操作时,它似乎没有识别出我在调用“ntile”函数时所期望的行:
Check[,Test := ifelse(a < 0,
ntile(a[a < 0],Buckets)*-1,
ntile(a[a >= 0],Buckets))]
再次执行检查:
Check[,range(a),by = Test][order(Test)]
哪个不检查...
谁能让我知道我缺少什么以及是否可以在这里使用“ifelse”?也欢迎任何其他方法,因为我总是热衷于学习新事物。
任何帮助将不胜感激。谢谢
解决方案
推荐阅读
- java - 为什么 Files.deleteIfExists 需要这么长时间来处理大文件?
- javascript - 在取消对话时使选择菜单恢复
- android - viewpager 内的内容在左右滚动时左右移动
- javascript - 使用基于分组的源对象数组的属性创建对象数组
- autodesk-forge - 由于未捕获的 Promise,实时部署时的 Forge Extension 未加载
- android - 在 Android 中创建日历事件,在 iOS 中编辑
- kubernetes - 部署 2 个 GKE 集群,第一个集群专用于 Spinnaker,其他集群用于我的应用程序
- r - 按组创建新的 POSIXct 序列
- vmware-player - VMware 工作站播放器在软件升级到版本 15 时无法使用暂停按钮
- c++ - 为什么这是一个未解决的符号