Будет намного проще, если входной набор данных будет в стандартном формате (то есть уникальные имена столбцов, без «подзаголовков»), но мы все равно можем преобразовать его в вывод желаемого с помощью таких инструментов, как tidyverse
:
library(tidyverse)
df %>%
rownames_to_column(var = "Firm") %>%
gather(Month, pct, -Firm) %>%
mutate(Month = sub('\\.\\d$', '', Month),
status = ifelse(Firm == "Firm", pct, NA)) %>%
fill(status) %>%
filter(Firm != "Firm") %>%
arrange(Firm)
Результат:
Firm Month pct status
1 A November 67% On-time
2 A November 33% Not
3 A December 23% On-time
4 A December 77% Not
5 B November 100% On-time
6 B November 0% Not
7 B December 50% On-time
8 B December 50% Not
Данные:
df = read.table(text=" November November December December
Firm On-time Not On-time Not
A 67% 33% 23% 77%
B 100% 0% 50% 50%", header = TRUE, row.names = 1)