【问题标题】:Dummy variables code for intervals in RR中间隔的虚拟变量代码
【发布时间】:2014-10-21 23:08:16
【问题描述】:

我有一个来自特定来源的属性距离变量(以米为单位),通过 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

编码似乎有问题。它不会使用看起来正确的编码分配位于区间内的所有属性。有什么建议吗?

【问题讨论】:

  • 除了迄今为止有用的答案,请查看findInterval,并在 SO 上发布问题之前学习搜索。

标签: r intervals


【解决方案1】:

使用cut 函数为区间创建单个分类变量:

data$DistanceCut5 = cut(data$Distance, breaks=c(0,100,200,300,400,500))

如果您要进行回归,则无需编写单独的虚拟变量。如果您在回归公式中输入DistanceCut5R 会为您解决这个问题。

另外,请查看cut 的帮助,以便了解如何更改类别标签(使用 labels 参数)以及如何确定间隔的右侧或左侧是否闭合(使用right 参数)。

此外,如果Distance 的任何值大于500,cut 会将类别标签设置为NA(缺失)。如果要确保Distance 的所有值在DistanceCut5 中都有一个类别值,那么请确保levels 的最小值和最大值之间的范围包括Distance 中的所有值。

另一种风格的注释:data 实际上是R 中的一个函数,所以最好不要养成使用它作为数据框名称的习惯。

【讨论】:

  • 如果需要,model.matrix(~ DistanceCut5 + 0, data=data) 会为您提供分开的列。
  • 谢谢@eipi10!只是一个(愚蠢的)问题。 0-100区间好像没有估计?只是从 DistanceCut(100,200] DistanceCut(200,300] 等开始。那是 101-200 和 201-300 吗?所以它不重叠。非常感谢!
  • 你的意思是你的数据框还是回归分析的结果?如果是后者,那么(0,100] 是基类,其他类别系数是相对于基类的。这就像传统的虚拟编码一样。如果你想在回归中包含截距,你总是必须省略一个类别。
  • 另外一件事:由于本例中的类别是有序的,您应该在cut 函数中设置ordered_result=TRUE。这将使RDistanceCut5 视为有序因素而不是名义因素。
猜你喜欢
  • 2018-09-01
  • 2015-10-23
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2018-06-19
  • 2018-01-20
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多