我想检查数据集的相等性。数据集看起来像这样
Equips <- c(1,1,1,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,6,7,8)
Notifs <- c(10,10,20,55,63,67,71,73,73,73,81,81,83,32,32,32,32,
47,48,45,45,45,51,51,55,56,69,65,88)
Comps <- c("Motor","Ventil","Motor","Gehäuse","Ventil","Motor","Steuerung","Motor",
"Ventil","Gehäuse","Gehäuse","Ventil","Motor","Schraube","Motor","Festplatte",
"Heizgerät","Motor","Schraube","Schraube","Lichtmaschine","Bremse","Lichtmaschine",
"Schraube","Lichtmaschine","Lichtmaschine","Motor","Ventil","Schraube")
rank <- c(1,1,2,1,2,3,1,2,2,2,3,3,4,1,1,1,1,2,3,1,1,1,2,2,3,4,1,1,1)
df <- data.frame(Equips,Notifs,Comps,rank)
应逐行读取数据帧。
我的问题如下: 我有一个非常大的数据集,我想看看一个Equips中的Comps在所有等级中是否相同。
要指定:如果在排名1和排名2中列出了一个组件(在此示例中为:是),则公平1已获得排名1和2我想要进行比较
Equips 2有3个等级,这里也没有列出第一,第二和第三等级的Comps。
Equips 5有4个等级,是的,这里是每个等级的Comps:即“Lichtmaschine”。
那么我想要的输出是什么? 如果我得到一个输出,它的数量为Equips,并且为TRUE或FALSE(如汇总命令)就足够了
如果在每个等级(一个等级内)中列出了一个Comps,则
还有一些注意事项:数据集非常大,所以我需要一个自动化版本,如果可能的话,只需使用没有任何包的标准R程序。
非常感谢您的努力。
查理
答案 0 :(得分:2)
以下是使用plyr
包的答案:
library(plyr)
ddply(df, .(Equips), function(d) {
nb.comps <- length(unique(d$rank))
tab <- table(d$rank, d$Comps) > 0
tab <- margin.table(tab, 2)
return(sum(tab>=nb.comps)>0)
})
给出了:
Equips V1
1 1 TRUE
2 2 FALSE
3 3 FALSE
4 4 FALSE
5 5 TRUE
如果您确实不想使用plyr
,可以使用by
功能:
by(df, df$Equips, function(d) {
nb.comps <- length(unique(d$rank))
tab <- table(d$rank, d$Comps) > 0
tab <- margin.table(tab, 2)
return(sum(tab>=nb.comps)>0)
})
df$Equips: 1
[1] TRUE
--------------------------------------------------------
df$Equips: 2
[1] FALSE
--------------------------------------------------------
df$Equips: 3
[1] FALSE
--------------------------------------------------------
df$Equips: 4
[1] FALSE
--------------------------------------------------------
df$Equips: 5
[1] TRUE
如果您想总结结果,可以执行以下操作:
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)
})
data.frame(nb.equips=dim(result), nb.matched=sum(result))
给出了:
nb.equips nb.matched
1 5 2