У меня есть некоторые данные, где мы применяем несколько тестов (называемых параметрами) к разным «die», и каждый «die» может либо пройти, либо пропустить данный тест.Использование функции tap, которая имеет несколько выходов
Вот небольшая часть из dataframe имени 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
Если я предоставил полный набор данных, вы увидите несколько кубик (пронумерованных 1,2,3, ...), многие другие разные параметров, а при первом сбое вы увидите FALSE (die die) или TRUE (die failed), а иногда 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
Вопросы:
Как я могу получить данные в dataframe, который является более читаемым? Что-то вроде этого:
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
Как я могу отсортировать параметры в этой структуре данных в первоначальном порядке?
Спасибо!
Я не пробовал чтения в вашем примере данных, но, возможно, 'lapply (сплит (alldie $ firstfailure, alldie параметр $) , ly) 'больше того, что вам нужно ... или просто установите' tapply' 'option simplify = FALSE (что, вероятно, делает то же самое) – Frank
Спасибо, Фрэнк, но это дает ответы, как и раньше, в отношении такой же относительно непроницаемый и труднодоступный результат. –
Хорошо, я понимаю, что тебе нужно. Одна из проблем заключается в том, что имена столбцов не могут быть автоматически генерированы. Вероятно, вы захотите изменить свою функцию, чтобы вернуть что-то с именованными аргументами 'c (npass = npass, ...)'. При этом вы можете 'do.call (rbind, lim_yld)'. Если вы открыты для пакетов, есть более простые способы сделать этот материал split-apply-comb. – Frank