r - 从给定的水平因子获得下一个水平
问题描述
我目前正在使用 R 和 RStudio 迈出第一步,现在我正在努力解决以下问题:我得到了一些关于四列马拉松的测试数据,其中第三列是代表不同年龄段的 15 个级别的因子。randomAgeClass
开始时会随机选择一个年龄段,并创建一个对象来保存与该年龄段匹配的数据。
set.seed(12345678)
attach(marathon)
randomAgeClass <- sample(levels(marathon[,3]), 1)
filteredMara <- subset(marathon, AgeClass == randomAgeClass)
我的目标是存储第二个对象,该对象包含与下一个更高级别匹配的数据,这意味着如果随机选择年龄段“孩子”,我现在想要访问与“青少年”相关的数据,这是下一个更高级别。看起来像这样:
nextAgeClass <- .... randomAgeClass+1 .... ?
filteredMaraAgeClass <- subset(marathon, AgeClass == nextAgeClass)
请注意,我已经找到了这个StackOverflow 问题,它似乎部分符合我的情况,但接受的答案对我来说是无法理解的,因此我无法将其应用于我的需要。
非常感谢任何耐心的帮助!
解决方案
首先,您必须确保因子的水平按年龄排序:
factor(marathon$AgeClass,levels=c("kids","teenagers",etc.))
然后你几乎在你的例子中到达了那里:
next_pos<-which(levels(marathon$AgeClass)==randomAgeClass)+1 #here you get the desired position in the level vector
nextAgeClass <- levels(marathon$AgeClass) [next_pos]
filteredMaraAgeClass <- subset(marathon, AgeClass == nextAgeClass)
如果randomAgeClass
是最后一个,您可能会遇到问题,因此请确保避免该问题
推荐阅读
- delphi - 如何在 Delphi 2010 中运行媒体播放器时修复“初始化 MCI 时出现问题”调试消息
- c# - 为什么我的 Enum 参数回到默认值?
- c# - Owin 新项目抛出 NullReference
- vb.net - 如何在 VB.NET 的 Excel 工作表中设置密码?
- clojure - Clojure STM 的实际应用
- typescript - 通过 promise 可观察到的过滤器数组
- ios - 如何快速计算接收变量之间的时间
- python - Django:如何使用相关模型的字段自动填充字段
- c++ - VSCode 用户代码段在其他代码段中不起作用
- elasticsearch - 弹性中的嵌套布尔聚合