Я создаю файл sweave R., который будет компилировать pdf-отчет по тестированию данных из части программного обеспечения. Данные в основном извлекается из таблицы сервера SQL, который выглядит примерно так:Нахождение второго наивысшего значения вместо максимального значения «-1»
| FileName | Version | Category | Value | Date | TestNum |
|:--------:|:-------:|:--------:|:-----:|:-------------------:|:-------:|
| File1 | 1.0.12 | Run Time | 74 | 2016-10-01 12:00:00 | 1 |
| File1 | 1.0.12 | Totals | 468 | 2016-10-01 12:00:00 | 1 |
| File1 | 1.0.12 | DB Size | 589 | 2016-10-01 12:00:00 | 1 |
| File2 | 1.0.12 | Run Time | 81 | 2016-10-01 12:00:00 | 1 |
| File2 | 1.0.12 | Totals | 351 | 2016-10-01 12:00:00 | 1 |
| File2 | 1.0.12 | DB Size | 625 | 2016-10-01 12:00:00 | 1 |
| File1 | 1.0.15 | Run Time | 74 | 2016-10-01 12:00:00 | 2 |
| File1 | 1.0.15 | Totals | 468 | 2016-10-01 12:00:00 | 2 |
| File1 | 1.0.15 | DB Size | 589 | 2016-10-01 12:00:00 | 2 |
| File2 | 1.0.15 | Run Time | 81 | 2016-10-01 12:00:00 | 2 |
| File2 | 1.0.15 | Totals | 351 | 2016-10-01 12:00:00 | 2 |
| File2 | 1.0.15 | DB Size | 625 | 2016-10-01 12:00:00 | 2 |
| File1 | 1.0.17 | Run Time | 74 | 2016-10-01 12:00:00 | 3 |
| File1 | 1.0.17 | Totals | 468 | 2016-10-01 12:00:00 | 3 |
| File1 | 1.0.17 | DB Size | 589 | 2016-10-01 12:00:00 | 3 |
| File2 | 1.0.17 | Run Time | 81 | 2016-10-01 12:00:00 | 3 |
| File2 | 1.0.17 | Totals | 351 | 2016-10-01 12:00:00 | 3 |
| File2 | 1.0.17 | DB Size | 625 | 2016-10-01 12:00:00 | 3 |
| File1 | 1.0.21 | Run Time | 74 | 2016-10-01 12:00:00 | 4 |
| File1 | 1.0.21 | Totals | 468 | 2016-10-01 12:00:00 | 4 |
| File1 | 1.0.21 | DB Size | 589 | 2016-10-01 12:00:00 | 4 |
| File2 | 1.0.21 | Run Time | 81 | 2016-10-01 12:00:00 | 4 |
| File2 | 1.0.21 | Totals | 351 | 2016-10-01 12:00:00 | 4 |
| File2 | 1.0.21 | DB Size | 625 | 2016-10-01 12:00:00 | 4 |
Я использую столбец TestNum, чтобы сделать его проще постепенно сосчитать версии, так как они являются строками. Поэтому в моем R-скрипте у меня был раздел, который должен был найти последнюю версию и тот, что был до этого.
vLatest <- unique(df[df[,"TestNum"] == max(df$TestNum), "Version"])
vPrevious <- unique(df[df[,"TestNum"] == max(df$TestNum)-1, "Version"])
Однако есть моменты, когда одна версия программного обеспечения была чрезвычайно глючной и аварийна для каждого теста. Это не очень полезно видеть на графиках, так что я просто добавить строку в базе данных SQL, которые я использую, чтобы отфильтровать его, то R dataframe заканчивает тем, как это:
| FileName | Version | Category | Value | Date | TestNum |
|:--------:|:-------:|:--------:|:-----:|:-------------------:|:-------:|
| File1 | 1.0.12 | Run Time | 74 | 2016-10-01 12:00:00 | 1 |
| File1 | 1.0.12 | Totals | 468 | 2016-10-01 12:00:00 | 1 |
| File1 | 1.0.12 | DB Size | 589 | 2016-10-01 12:00:00 | 1 |
| File2 | 1.0.12 | Run Time | 81 | 2016-10-01 12:00:00 | 1 |
| File2 | 1.0.12 | Totals | 351 | 2016-10-01 12:00:00 | 1 |
| File2 | 1.0.12 | DB Size | 625 | 2016-10-01 12:00:00 | 1 |
| File1 | 1.0.15 | Run Time | 74 | 2016-10-01 12:00:00 | 2 |
| File1 | 1.0.15 | Totals | 468 | 2016-10-01 12:00:00 | 2 |
| File1 | 1.0.15 | DB Size | 589 | 2016-10-01 12:00:00 | 2 |
| File2 | 1.0.15 | Run Time | 81 | 2016-10-01 12:00:00 | 2 |
| File2 | 1.0.15 | Totals | 351 | 2016-10-01 12:00:00 | 2 |
| File2 | 1.0.15 | DB Size | 625 | 2016-10-01 12:00:00 | 2 |
| File1 | 1.0.21 | Run Time | 74 | 2016-10-01 12:00:00 | 4 |
| File1 | 1.0.21 | Totals | 468 | 2016-10-01 12:00:00 | 4 |
| File1 | 1.0.21 | DB Size | 589 | 2016-10-01 12:00:00 | 4 |
| File2 | 1.0.21 | Run Time | 81 | 2016-10-01 12:00:00 | 4 |
| File2 | 1.0.21 | Totals | 351 | 2016-10-01 12:00:00 | 4 |
| File2 | 1.0.21 | DB Size | 625 | 2016-10-01 12:00:00 | 4 |
Но vPrevious
является все еще ищут TestNum == 3
, и поэтому сценарий ломается. Есть ли способ, которым я мог бы искать второе по величине значение?
EDIT: По предложению, вот что выглядит запрос, который я использую для создания DataFrame.
df <- sqlQuery(db, "select FileName, Version, Category, Value, Date, TestNum
from Table where Comments != 'Do Not Include in R Chart'",
stringsAsFactors = F)
vPrevious <- уникальный (ДФ [DF [ "TestNum"] == сортировать (уникальный (ДФ $ TestNum), Т) [2], "Version"]) – dww
@dww Это было решение, которое я смотрел спасибо! – David
@David Я обновил Sql в соответствии с вашим запросом. Хотя у вас есть возможность добиться того же результата в Sql и R, вы можете потратить некоторое время, чтобы сравнить результаты и производительность? Могу дать некоторые интересные идеи ... Приветствия –