我有从一个地方到很多其他地方(A-Z)的GPS轴承(0-360度)的数据
我想创建4列虚拟变量,具体为:0-89度,90-179度,180-269度和270-360度。这样每个观测(A-Z)的三列中都有一个0,而列中的一个对应于它的方位。
全部谢谢!
答案 0 :(得分:0)
您可以将model.matrix
与cut
结合使用。 cut
使用分组创建一个因子,model.matrix
生成虚拟数据框。
x <- c(0, 67, 90, 183, 352)
res <- model.matrix(~ cut(x, c(-1, 89, 179, 269, 360))-1)
然后输出
cut(GPS$gps_bearing, c(-1, 89, 179, 269, 360))(-1,89]
1 1
2 1
3 0
4 0
5 0
cut(GPS$gps_bearing, c(-1, 89, 179, 269, 360))(89,179]
1 0
2 0
3 1
4 0
5 0
cut(GPS$gps_bearing, c(-1, 89, 179, 269, 360))(179,269]
1 0
2 0
3 0
4 1
5 0
cut(GPS$gps_bearing, c(-1, 89, 179, 269, 360))(269,360]
1 0
2 0
3 0
4 0
5 1
attr(,"assign")
[1] 1 1 1 1
attr(,"contrasts")
attr(,"contrasts")$`cut(GPS$gps_bearing, c(-1, 89, 179, 269, 360))`
[1] "contr.treatment"
现在列名称并不漂亮,应该可以更改,但矩阵就是你想要的。
答案 1 :(得分:0)
第1步:使用剪切分区温度 Step2 createDummyFeatures (存在于 mlr 库中)
install.packages("mlr")
library(mlr)
a <- data.frame(cbind(state=c("a","b","c","d","e","f","g"),
temperature=c(0,12,89,90,180,350,360)))
a$temperature <- as.numeric(levels(a$temperature))[a$temperature]
a$bucket <- cut(a$temperature,c(0,89,179,269,360),
labels=c("0-89","90-179","180-269","270-360"),include.lowest=TRUE)
createDummyFeatures(a,cols="bucket")
我的输出:
|sno |state |temperature |bucket.0.89 |bucket.90.179 |bucket.180.269 |bucket.270.360
|1 |a |0 |1 |0 |0 |0
|2 |b |12 |1 |0 |0 |0
|3 |c |89 |1 |0 |0 |0
|4 |d |90 |0 |1 |0 |0
|5 |e |180 |0 |0 |1 |0
|6 |f |350 |0 |0 |0 |1
|7 |g |360 |0 |0 |0 |1
如有任何疑问,请与我联系。