在R data.table中具有外部指定的四分位数断点的四分位数排序器

时间:2019-05-28 22:18:07

标签: r data.table quantile

我想将变量“ varbl”上的观察结果分类为四分位数。由于我的数据很大(2Gb),因此我尝试通过data.table实现它。问题是我需要使用特定于组的外部四分位符。组变量是“ prd”或“ prd1”。

我的数据和断点如下:

data <- data.table(id = c(1,2,3,4,5,1,2,3,4,5), prd1 = c(1,1,1,1,1,2,2,2,2,2), varbl = c(-1.6, -0.7, 0.1, 1.2, -0.5, -0.8, 0.4, 1.2, 1.9, 4))
bks <- data.table(prd=c(1,2), br0 = c(-5,-5), br1=c(-1,0), br2=c(0, 0.5), br3=c(1, 3), br4=c(5,5))
 > data
    id prd1 varbl
 1:  1    1  -1.6
 2:  2    1  -0.7
 3:  3    1   0.1
 4:  4    1   1.2
 5:  5    1  -0.5
 6:  1    2  -0.8
 7:  2    2   0.4
 8:  3    2   1.2
 9:  4    2   1.9
10:  5    2   4.0
> bks
   prd br0 br1 br2 br3 br4
1:   1  -5  -1 0.0   1   5
2:   2  -5   0 0.5   3   5

所需的输出是:

> output
    id prd1 varbl ntile
 1:  1    1  -1.6     1
 2:  2    1  -0.7     2
 3:  3    1   0.1     3
 4:  4    1   1.2     4
 5:  5    1  -0.5     2
 6:  1    2  -0.8     1
 7:  2    2   0.4     2
 8:  3    2   1.2     3
 9:  4    2   1.9     3
10:  5    2   4.0     4

我尝试了以下代码,但是失败了,因为我无法从数据中将bks与当前prd1放在同一prd上。

data[, ntile := cut(varbl, breaks = bks[prd==prd1], include.lowest=TRUE, labels = 1:4)]

作为另一种尝试,我尝试首先连接数据和bks(我不希望这样做,因为这会将数据大小从2Gb增加到4Gb) 然后将观察结果分类为分位数。失败了,因为我不明白如何使用列名为每行构造一个断点向量。没有任何尝试成功。

setnames(data, "prd1", "prd")
data <- data[bks, on="prd", nomatch=0]
data[, ntile := cut(varbl, breaks = .(br0, br1, br2, br3, br4), include.lowest=TRUE, labels=1:4)]
data[, ntile := cut(varbl, breaks = colnames(bks)[-1], include.lowest=TRUE, labels=1:4)]
data[, ntile := cut(varbl, breaks = c("br0", "br1", "br2", "br3", "br4"), include.lowest=TRUE, labels=1:4)]

1 个答案:

答案 0 :(得分:3)

稍微重新排列function readSpreadsheetsInAFolder() { var ssA=[]; var folders=DriveApp.getFoldersByName("LinkedSpreadsheets"); while(folders.hasNext()){ var folder=folders.next(); var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS); while(files.hasNext()) { var file=files.next(); var ss=SpreadsheetApp.openById(file.getId()); ssA.push({name:file.getName(),id:file.getId()}); } } return ssA; } 意味着您可以将其作为联接:

bks