剪切函数对于区间返回NA

5

我正在尝试使用cut函数创建年龄区间。但是,对于与第一个断点的下限匹配的值,我收到了NAs。

例如:

AGE <- sample(18:50, 100, replace = TRUE)
AGE_GROUPS <- cut(AGE, breaks = c(18, 27, 36, 45))
DF <- data.frame(AGE, AGE_GROUPS)

在所有AGE大于等于18且大于45的值中,AGE_GROUPS变量中会收到NA。如何确保AGE_GROUPS的最低分组包括18岁及以上,并确保最高分组包括所有大于等于45岁的人?


除了下面发布的答案之外,我想分享一个技巧,通常可以获得更合理的切割范围。我倾向于根据需要 [] 来“玩弄”变量的 minmax 值。例如,看看这个 AGE <- sample(18:50, 100, replace = TRUE); unique(cut(AGE, breaks = c(min(AGE)-1, 19, 27, 36, 45, max(AGE)))); unique(cut(AGE, breaks = c(min(AGE), 19, 27, 36, 45, max(AGE)+1), right = F))。唯一需要检查的是您没有重复的断点。 - AntoniosK
1个回答

14

停车不仅是中间的停车,还包括终点。你可以使用

breaks = c(-Inf, 18, 27, 36, 45, Inf)

稍微保守一点,你可以使用

breaks = c(0, 18, 27, 36, 45, 120)

这对于捕捉异常编码错误非常有用。您可能还希望使用include.lowest = TRUE。请参见?cut以获取示例。


从技术/实践角度来看,这解决了我的问题。谢谢!从概念上讲,这是否意味着18的中断意味着18-27范围内不包括18的值?为此,我需要创建一个17-27的范围吗? - Tea Tree
2
默认值为right = TRUE,这意味着“区间应在右侧关闭(左侧开放)”(参见?cut),即18到27的区间将是(18, 27](默认标签),包括27但不包括18。为了清晰起见,建议使用非整数断点,因此如果您希望区间包括18和27,请使用17.5和27.5作为断点。然后很明显,18和27都在该区间内,但17和28不在其中。如果您想知道为什么这似乎有点令人困惑,请记住,cut不仅适用于整数,还适用于任何数字数据。 - Gregor Thomas
太好了,非常有帮助!我很感激。 - Tea Tree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接