首页 > 解决方案 > 从给定的水平因子获得下一个水平

问题描述

我目前正在使用 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 问题,它似乎部分符合我的情况,但接受的答案对我来说是无法理解的,因此我无法将其应用于我的需要。

非常感谢任何耐心的帮助!

标签: r

解决方案


首先,您必须确保因子的水平按年龄排序:

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是最后一个,您可能会遇到问题,因此请确保避免该问题


推荐阅读