1) dplyr / tidyr Предполагая, что ввод DF
такой же, как в примечании, в конце создайте столбец Transcriber
со значениями Transcriber1
и Transcriber2
и столбец Seq
с последовательностью числа и, наконец, использовать spread
для преобразования в широкую форму.
library(dplyr)
library(tidyr)
DF %>%
group_by(Code) %>%
mutate(Transcriber = as.numeric(factor(Transcriber, levels = unique(Transcriber)))) %>%
group_by(Transcriber = paste0("Transcriber", Transcriber), add = TRUE) %>%
mutate(Seq = seq_along(Errors)) %>%
ungroup %>%
spread(Transcriber, Errors) %>%
select(-Seq)
дает:
# A tibble: 14 x 3
Code Transcriber1 Transcriber2
<dbl> <int> <int>
1 1011 1 8
2 1011 2 9
3 1011 3 10
4 1011 4 11
5 1011 5 12
6 1011 6 13
7 1011 7 14
8 2011 15 22
9 2011 16 23
10 2011 17 24
11 2011 18 25
12 2011 19 26
13 2011 20 27
14 2011 21 28
2) База R Решение, использующее только базу R, будет:
make_factor <- function(x) factor(x, levels = unique(x))
DF2 <- transform(DF,
Transcriber = paste0("Transcriber", ave(as.numeric(Transcriber), Code, FUN = make_factor)),
Seq = ave(Errors, Code, Transcriber, FUN = seq_along))
r <- reshape(DF2, dir = "wide", idvar = c("Seq", "Code"), timevar = "Transcriber")[-2]
names(r) <- sub("Errors.", "", names(r))
DF <- data.frame(Code = rep(c(1011, 2011), each = 14),
Transcriber = rep(c("Anna", "David", "Susan", "Anna"), each = 7),
Errors = 1:28)
Вы можете:
При предназначении для современных версий Windows (Windows 2000) и выше можно использовать функцию UpdateLayeredWindow для отображения любого битового массива (включая один с альфа-каналом, раз так желаемым).
Я занес серию из четырех частей в блог о том, как записать приложение Win32 C++, которое делает это. Если необходимо ожидать в течение точно десяти секунд для закрытия экрана-заставки (вместо того, пока главное окно не готово), необходимо было бы использовать предложенный метод Dan Cristoloveanu таймера, который называет DestroyWindow.
Зарегистрируйте класс для окна всплеска и создайте окно с помощью этих стилей:
_
POPUPWINDOW: удостоверится, что Ваше окно не имеет никакого caption/sysmenu_
EX_
САМЫЙ ВЕРХНИЙ: сохранит экран-заставку сверху всего. Обратите внимание, что это немного навязчиво. Могло бы быть лучше просто сделать окно всплеска ребенком Вашего главного окна. Вам, вероятно, придется управлять z-порядком, тем не менее, для хранения любых других всплывающих окон (при создании кого-либо) ниже экрана-заставки.Используйте CreateDIBSection для загрузки битового массива. Это должно быть легко, так как файлы BMP являются по существу дампами структур DIB. Или сделайте то, что сказал Ken, и используйте LoadImage.
Обработайте WM_
КРАСКА или WM_
ERASEBKGND обмениваются сообщениями для рисования битового массива на окне.
На WM_
СОЗДАЙТЕ устанавливает таймер 10 секунд и когда Windows отправляет WM_
Сообщение ТАЙМЕРА, имейте окно, уничтожают себя.
Ключевой пункт здесь должен использовать разделенное на уровни окно.
Можно запустить с win32 мастера сгенерированный проект и изменить вызов CreateWindow на CreateWindowEx и установить WS_EX_LAYERED как расширенный стиль окна и комбинацию WS_POPUP и WS_SYSMENU как стиль окна. Когда Вы делаете, которые запускают Ваше приложение, это будет невидимо. Затем необходимо использовать UpdateLayeredWindow для рисования изображения. Вам, возможно, также понадобится функция AlphaBlend, если Вы хотите, используют изображение PNG с альфа-слоем.
Надеюсь, это поможет!
Это - API Win32 FAQ
Посмотрите профессиональный форум Win32api news://194.177.96.26/comp.os.ms-windows.programmer.win32, где ему отвечали на сотни времен в течение 20 лет..