带少量向量的条件查询

时间:2013-02-14 14:36:19

标签: r compare

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

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)

装备就像一台机器的号码,所以有两台机器,Notifs是一个用于访问的号码=&gt;排名显示该机器的访问次数。 Comps是被修复的组件。我想看看是否有组件,这些组件在每次访问本机时都已修复。

例如,通过机器1,点火和火焰检测在等级1和等级2修复,所以我想输出TRUE, 机器2被访问了3次,但没有组件在rank1,2和3中被修复,因此输出应为FALSE。 (原始数据集,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))

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

1 个答案:

答案 0 :(得分:1)

也许这个?您的代码中的问题是您在函数内部d替换了df。在我看来,我的答案在your original question ...

中是正确的
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