我有一个名为Longitude
的连续变量(它对应于地理经度),它有12465个唯一值。我需要创建一个名为Longitude1024
的新变量,该变量由分为1024个大小相同的组的变量Longitude组成。我使用以下函数做到了这一点:
data$Longitude1024 <- as.factor( as.numeric( cut(data$Longitude,1024)))
然而,问题在于,当我使用此函数创建新变量Longitude1024
时,这个新变量只包含651个唯一元素而不是1024.有谁知道这里的问题是什么,怎么可能我实际上得到了1024个唯一值的新变量?
非常感谢
答案 0 :(得分:1)
使用rank
,然后缩小。以下是10个小组的示例:
x <- rnorm(124655)
g <- floor(rank(x) * 10 / (length(x) + 1))
table(g)
# g
# 0 1 2 3 4 5 6 7 8 9
# 12465 12466 12465 12466 12465 12466 12466 12465 12466 12465
答案 1 :(得分:0)
简短回答:尝试cut2
套餐中的Hmisc
答案很长
示例:将dat
分割为100个唯一值,分成100个相等的10个组。
不起作用:
# dummy data
set.seed(321)
dat <- rexp(1000)
# all unique values
length(unique(dat))
[1] 1000
cut
生成100个级别
init_res <- cut(dat, 100)
length(unique(levels(init_res)))
[1] 100
但不会将数据拆分为同等大小的组
init_grps <- split(dat, cut(dat, 100))
table(unlist(lapply(init_grps, length)))
0 1 2 3 4 5 6 7 9 10 11 13 15 17 18 19 22 23 24 25 27 37 38 44 47 50 63 71 72 77
42 9 8 4 1 3 1 3 2 1 2 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 2 1 1
适用于Hmisc :: cut2
cut2
根据需要将矢量划分为相等长度的组
require(Hmisc)
final_grps <- split(dat, cut2(dat, g=100))
table(unlist(lapply(final_grps, length)))
10
100
如果需要,可以将结果存储在数据框中,例如
foobar <- do.call(rbind, final_grps)
head(foobar)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[0.000611,0.00514) 0.004345915 0.002192086 0.004849693 0.002911516 0.003421753 0.003159641 0.004855366 0.0006111574
[0.005137,0.01392) 0.009178133 0.005137309 0.008347482 0.007072484 0.008732725 0.009379002 0.008818794 0.0110489833
[0.013924,0.02004) 0.014283326 0.014356782 0.013923721 0.014290554 0.014895342 0.017992638 0.015608931 0.0173707930
[0.020041,0.03945) 0.023047527 0.020437743 0.026353839 0.036159321 0.024371834 0.026629812 0.020793695 0.0214221779
[0.039450,0.05912) 0.043379064 0.039450453 0.050806316 0.054778805 0.040093806 0.047228050 0.055058519 0.0446634954
[0.059124,0.07362) 0.069671018 0.059124220 0.063242564 0.064505875 0.072344089 0.067196661 0.065575249 0.0634142853
[,9] [,10]
[0.000611,0.00514) 0.002524557 0.003155055
[0.005137,0.01392) 0.008287758 0.011683228
[0.013924,0.02004) 0.018537469 0.014847937
[0.020041,0.03945) 0.026233400 0.020040981
[0.039450,0.05912) 0.041310471 0.058449603
[0.059124,0.07362) 0.063608022 0.066316782
希望这有帮助