从现有变量创建新的分类变量

时间:2018-11-06 16:26:18

标签: r

我有一个变量“ PULocation”,它是一组从1到265的整数。每个数字代表纽约市中的唯一位置。然后,每个位置都位于“布朗克斯”,“布鲁克林”,“ ERW”,“曼哈顿”,“女王”,“史坦顿岛”或“未知”之一。在我的数据集中,我只有由整数定义的PULocation变量,并且我有单独的信息来知道每个整数代表什么。我想创建一个单独的变量来定义自治市镇而不是特定位置,问题是整数不是由自治市镇组织的,它们是分散的。香港专业教育学院包括下面的映射,以显示我要解释的内容。

我已经尝试过了 cab_sample $ PUBorough <-ifelse(cab_sample $ PULocationID ==                                  c(3,18,20,31,32,46,47,51,58,59,60,78,                                    81,94,119,126,136,147,159,167,168,169,                                    174,182,183,184,185,199,200,208,212,213,                                    220,235,240,241,242,247,248,250,254,259),                                “布朗克斯”,“什么都没有”) 但我收到此错误消息

警告信息: 在cab_sample $ PULocationID == c(3,18,20,31,32,46,47,51,58,:   较长的物体长度不是较短的物体长度的倍数

有没有办法进行这种映射?

这是每个整数的映射

enter image description here

1 个答案:

答案 0 :(得分:0)

每个label对应于breaks向量中两个连续值之间的间隔(例如,曼哈顿是102-150的间隔)。
因此,您可以使用findInterval函数来检查PULocation向量的每个整数在哪个间隔(即,在哪个区中)。然后,您可以使用findInterval返回的间隔的索引来索引标签向量:

cab_data$borough <- labels[findInterval(cab_data$PULocation, breaks)]

使用dplyr

cab_data %>% mutate(borough = labels[findInterval(PULocation, breaks)])

使用函数参数left.open(逻辑),您可以确定是否要将每个间隔的左中断包括在间隔中。