我有一些数据,我们将多个测试(称为参数)应用于不同的“模具”,每个“模具”可以通过或不通过给定的测试。
以下是名为alldie
的数据框的一小部分 die parameter firstfailure
1 1 Resistance_Test DevID (Ohms) 428 FALSE
2 1 Diode_Test SUBLo (V) 353 FALSE
3 1 Gate_Test V1_WELL (V) 361 FALSE
4 1 Gate_Test V2_WELL (V) 360 FALSE
5 1 Gate_Test V3_WELL (V) 361 FALSE
6 1 Class_Test Cluster Class2 (#) 6 FALSE
7 1 Class_Test Column Class1 (#) 2 TRUE
8 1 Class_Test Cluster Class1 (#) 2 NA
如果我提供了完整的数据集,你会看到多个die(编号1,2,3,...),更多不同的参数,并且在firstfailure下,你会看到FALSE(传递死亡)或TRUE(死亡)失败了)如果没有进行测试,偶尔会有NA。
我以为我可以通过编写一个函数然后使用tapply
ly <- function(data) {
ndie <- sum(!is.na(data))
npass <- ndie - sum(data,na.rm = TRUE)
yield <- npass / ndie
c(npass,ndie,yield)
}
这是我想要的计算,但会产生一些难以使用的输出
tapply(alldie$firstfailure, alldie$parameter, ly)) -> lim_yld
然后lim_yld看起来像(仅前几行,tapply
按字母顺序排列参数)
$`Class_Test Cluster Class1 (#) 2`
[1] 76 76 1
$`Class_Test Cluster Class2 (#) 6`
[1] 89 89 1
$`Class_Test Column Class1 (#) 2`
[1] 76.0000000 89.0000000 0.8539326
问题:
如何将数据导入更易读的数据框?像这样的东西:
Parameter Npass Ndie Proportion
Class_Test Cluster Class1 (#) 2 76 76 1.0000000
Class_Test Cluster Class2 (#) 6 89 89 1.0000000
Class_Test Column Class1 (#) 2 76 89 0.8539326
如何按原始顺序对此数据框中的参数进行排序?
谢谢!
答案 0 :(得分:1)
这个解决方案怎么样?获取tapply的结果并转换为数据帧。添加列标题和参数名称:
df<-as.data.frame(matrix(unlist(lim_yld), ncol=3, byrow=TRUE))
names(df)<-c("npass","ndie","yield")
df<-cbind(parameter=names(lim_yld), df)
正如上面提到的注释在列名方面不是很通用,但它确实与你的函数返回一致。似乎tapply返回列表是反向的,以防万一这应该工作:
df<-df[order(df$parameter, alldie$parameter ),]