如何解决“错误:matrix / data.frame条件应该合乎逻辑。”

时间:2019-02-14 06:56:11

标签: r dataframe countif

我找不到

  

错误: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 :(得分:0)

使用几种解决方案可以更轻松地解决此问题,其中一些解决方案用here表示。因此,这是一个重复的问题。但是,它们不使用data.table包,因此我将在此处提供使用此包的示例。有关更多信息,请查看其wiki page here。此外,数据的最后一列似乎是逻辑的,应将其更改为数字

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]

答案 1 :(得分:0)

此较小的更改应有助于您获得所需的输出

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

希望有帮助。