将变量拆分为大小相同的组

时间:2015-09-02 20:42:42

标签: r split

我有一个名为Longitude的连续变量(它对应于地理经度),它有12465个唯一值。我需要创建一个名为Longitude1024的新变量,该变量由分为1024个大小相同的组的变量Longitude组成。我使用以下函数做到了这一点:

data$Longitude1024 <- as.factor( as.numeric( cut(data$Longitude,1024)))

然而,问题在于,当我使用此函数创建新变量Longitude1024时,这个新变量只包含651个唯一元素而不是1024.有谁知道这里的问题是什么,怎么可能我实际上得到了1024个唯一值的新变量?

非常感谢

2 个答案:

答案 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

希望这有帮助