1

简短的问题..带有以下示例数据:

Equips <- c(1000829,1000829,1000829,1000829,10002244,10002244,
10002244,10002244,10002244,10002244)
Notifs <-     c(306989814,306991263,306991263,306991263,306749278,306749278,
306749278,306749278,306854440,306868916)
Comps <- c("Ignition and Flame Detection","Ignition and Flame Detection","Control Box",
"Ignition and Flame Detection","Service Boiler!!!","CH Components Passive",
"Ignition and  Flame Detection","not grouped in WCC",
"Electrical Components","Flue Duct")
rank <- c(1,2,2,2,1,1,1,1,2,3)
df <- data.frame(Equips,Notifs,Comps,rank)

Equip就像一台机器的数字,所以有2台机器,Notifs是访问次数=> rank显示机器的访问次数。Comps 是需要修复的组件。我想看看是否有组件,在每次访问这台机器时都进行了修复。

例如机器 1,点火和火焰检测在 rank 1 和 rank 2 被修复,所以我想要一个输出 TRUE,机器 2 被访问了 3 次,但是在 rank1、2 和 3 中没有被修复的组件所以输出应该是假的。(原始数据集,Equips 访问次数高达 10 次!!)

我有一个类似的问题并且有这个代码。

但它不工作。也许你可以得到它:

 result <- by(df, df$Equips, function(d) {
    nb.comps <- length(unique(df$Comps))
    tab <- table(df$rank, df$Comps) > 0
    tab <- margin.table(tab, 2)
    return(sum(tab>=nb.comps)>0)
  })

data.frame(nb.equips=dim(result), nb.matched=sum(result))

我真的很想要这样的东西,因为我没有机会安装任何包,而且由于数据集的大小,我真的需要像最后一个代码一样的整体视图。如果您有任何问题,请询问。

4

1 回答 1

1

也许这个?您的代码中的问题是您在函数内部替换d为。df在我看来,我的回答在你原来的问题中是正确的......

result <- by(df, df$Equips, function(d) {
    nb.comps <- length(unique(d$Comps))
    tab <- table(d$rank, d$Comps) > 0
    tab <- margin.table(tab, 2)
    return(sum(tab>=nb.comps)>0)
  })

这使 :

R> result
df$Equips: 1000829
[1] TRUE
-------------------------------------------------------- 
df$Equips: 10002244
[1] FALSE
R> data.frame(nb.equips=dim(result), nb.matched=sum(result))
  nb.equips nb.matched
1         2          1
于 2013-02-14T14:49:50.837 回答