У меня есть набор данных с 31557 наблюдениями и переменными Order.number и Materials. Я пытаюсь запустить это в R:
Первый:
DT <- data.table(Order.number=X$Order.number, Materials=X$Materials)
setorder(DT, Order.number, Materials)
Потом:
library(data.table)
ans <- DT[, as.data.table(do.call(rbind, combn(Materials, 2, simplify=FALSE))),
by=Order.number][,
.N, by=.(V1, V2)]
Но я получаю ошибку в combn(Materials, 2, simplify = FALSE) : n < m
Это работает, если я просто использую случайную сгенерированную таблицу. Так могло ли это быть как-то связано с набором данных, который у меня есть?
РЕДАКТИРОВАТЬ: я пробовал с значением ошибки гребня, но получаю сообщение «Ошибка в do.call (rbind, function (x) if (length (x)> 1) {: второй аргумент должен быть списком»)
ans <- DT[, as.data.table(do.call(rbind, function(x)
if(length(x)>1) {
combn(Materials, 2, simplify=FALSE)
}
else x)),
by=Order.number][,
.N, by=.(V1, V2)]
length(Materials)
возвращается? - person Rui Barradas   schedule 23.05.2018if
должно бытьif(length(x)>1) { combn(x, 2, simplify=FALSE) }
. - person Rui Barradas   schedule 24.05.2018Order.number
в вашем DT, дающее группу длиной 1 или меньше, поэтомуcombn(Materials, 2...)
жалуется, что n ‹m. Вы можете легко определить, какая группа имеет длину 1, с помощьюDT[, .N, by=Order.number] [N==1]
- person smci   schedule 24.05.2018