Как исправить ошибку «Ошибка: критерий matrix / data.frame должен быть логичным». - PullRequest
0 голосов
/ 14 февраля 2019

Я не могу найти

Ошибка: критерий matrix / data.frame должен быть логичным.

в моем коде.

#count prod_no downward
consoContact2$Count <- as.numeric("")
for (xNo in 1:nrow(consoContact2)){
  consoContact2$Count[xNo] <- count_if(consoContact2[xNo,1],consoContact2[1:xNo,1])
}

Выборка данных:

    Prod_No         Order_No    Reff_ID                       Count
1   03MB1902-118    920522XXXX  03MB1902-118'A**0920522XXXX NA
2   03MB1902-118    33333XXXX   03MB1902-118'C**033333XXXX  NA
3   07MB1902-105    922977XXXX  07MB1902-105'A**0922977XXXX NA
4   07MB1902-105    32231XXXX   07MB1902-105'C**032231XXXX  NA
5   07MB1902-105    32268XXXX   07MB1902-105'C**032268XXXX  NA

Это должны быть выходные данные:

    Prod_No         Order_No    Reff_ID                       Count
1   03MB1902-118    920522XXXX  03MB1902-118'A**0920522XXXX 1
2   03MB1902-118    33333XXXX   03MB1902-118'C**033333XXXX  2
3   07MB1902-105    922977XXXX  07MB1902-105'A**0922977XXXX 1
4   07MB1902-105    32231XXXX   07MB1902-105'C**032231XXXX  2
5   07MB1902-105    32268XXXX   07MB1902-105'C**032268XXXX  3

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Это небольшое изменение должно помочь вам получить требуемый результат

consoContact2$Count <- as.numeric("")
for (xNo in 1:nrow(consoContact2)){
  consoContact2$Count[xNo] <- length(which(consoContact2$Prod_No[1:xNo] == consoContact2[xNo,1]))
}

Надеюсь, это поможет.

0 голосов
/ 14 февраля 2019

Этот вопрос проще решить с помощью нескольких решений, некоторые из которых указаны здесь .Таким образом, это дублирующий вопрос.Однако они не используют пакет data.table, поэтому я приведу пример использования этого пакета.Для получения дополнительной информации посетите страницу вики здесь .Кроме того, кажется, что самый последний столбец ваших данных является логическим, и его следует заменить на числовой

library(data.table)
#Change from data.frame to data.table
setDT(data_sample)
#set count to be numeric
data_sample[, Count := as.integer(Count)]
#Change count to be the format needed.
data_sample[, Count := seq(1,.N), by = Prod_No]
...