简短问题..以下示例数据:
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))
我真的想要这样的东西,因为我没有机会安装任何软件包,并且由于数据集的大小,我真的需要像最后一个代码一样的整体视图。 如果您有任何疑问,请询问。
答案 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