我有一个来自特定来源的属性的距离变量(以米为单位),通过QGIS在我的数据子集中创建。
我想在R:
中创建虚拟区间,如下所示0-100,101-200,201-300,301-400& 401-500
我编码如下,以便在以下任何时间间隔内包含所有属性:
data$Distance_100<-0
data$Distance_100[data$Distance<100]<-1
data$Distance_200<-0
data$Distance_200[data$Distance>=101&data$Distance<200]<-1
data$Distance_300<-0
data$Distance_300[data$Distance>=201&data$Distance<300]<-1
data$Distance_400<-0
data$Distance_400[data$Distance>=301&data$Distance<400]<-1
data$Distance_500<-0
data$Distance_500[data$Distance>=401&data$Distance<500]<-1
在编码中似乎有些不对劲。它不会使用正确的编码分配位于区间内的所有属性。有什么建议吗?
答案 0 :(得分:2)
使用cut
函数为区间创建单个分类变量:
data$DistanceCut5 = cut(data$Distance, breaks=c(0,100,200,300,400,500))
如果您正在进行回归,则无需编写单独的虚拟变量。如果您在回归公式中输入R
,DistanceCut5
会为您解决此问题。
另外,请查看cut
的帮助,以便了解如何更改类别标签(使用labels
参数)以及如何确定间隔的右侧或左侧关闭(使用right
参数)。
此外,如果Distance
的任何值大于500,则cut会将类别标签设置为NA
(缺失)。如果您想确保Distance
的所有值都包含DistanceCut5
中的类别值,请确保levels
的最低值和最高值之间的范围包含{{1}中的所有值1}}。
另一种风格评论:Distance
实际上是data
中的一项功能,因此最好不要习惯将其用作数据框的名称。