Изменение структуры строк в столбцах таблицы в R - PullRequest
1 голос
/ 08 июля 2020

У меня есть таблица, которая вначале выглядит следующим образом:

test <- data.frame("Season" = c("Winter", "Winter", "Winter", "Winter", "Winter", "Winter"),
       "Site" = c(123,123,123,123,123,123),
       "Flow" = c("H001", "H007", "H030", "L001", "L007", "L030"),
       "P-Value" = c(0.05, 0.05, 0.05, 0.05, 0.05, 0.05),
       "H0" = c(1, 1, 1, 1, 1, 1),
       "Stat" = c(0.4, 0.4, 0.4, 0.4, 0.4, 0.4),
       "Slope" = c(1, 1, 1, 1, 1, 1))

И я хочу изменить строки / столбцы вокруг, чтобы таблица выглядела так:

test_2 <- data.frame("Site" = c(123), "P-Value for H001 winter" = c(0.05), "P-Value for H007 winter" = c(0.05),
                 "P-Value for H030 winter" = c(0.05), "P-Value for L001 winter" = c(0.05), "P-Value for L007 winter" = c(0.05),
                 "P-Value for L030 winter" = c(0.05), "H0 for H001 winter" = c(1), "H0 for H007 winter" = c(1), "H0 for H030 winter" = c(1),
                 "H0 for L001 winter" = c(1), "H0 for L007 winter" = c(1), "H0 for L030 winter" = c(1),
                 "Stat for H001 winter" = c(0.04), "Stat for H007 winter" = c(0.04), "Stat for H030 winter" = c(0.04),
                 "Stat for L001 winter" = c(0.04), "Stat for L007 winter" = c(0.04), "Stat for L030 winter" = c(0.04),
                 "Slope for H001 winter" = c(1), "Slope for H007 winter" = c(1), "Slope for H030 winter" = c(1),
                 "Slope for L001 winter" = c(1), "Slope for L007 winter" = c(1), "Slope for L030 winter" = c(1))

I Я пробовал много разных функций в dplyr и не могу получить именно то, что мне нужно.

Спасибо!

1 Ответ

2 голосов
/ 08 июля 2020

Думаю, вам нужно это:

test %>%
  pivot_longer(cols=c(P.Value, H0, Stat, Slope)) %>%
  mutate(name=paste(name, "for", Flow, Season)) %>%
  select(-Flow, -Season) %>%
  pivot_wider()

, который возвращает

structure(list(Site = 123, `P.Value for H001 Winter` = 0.05, 
    `H0 for H001 Winter` = 1, `Stat for H001 Winter` = 0.4, `Slope for H001 Winter` = 1, 
    `P.Value for H007 Winter` = 0.05, `H0 for H007 Winter` = 1, 
    `Stat for H007 Winter` = 0.4, `Slope for H007 Winter` = 1, 
    `P.Value for H030 Winter` = 0.05, `H0 for H030 Winter` = 1, 
    `Stat for H030 Winter` = 0.4, `Slope for H030 Winter` = 1, 
    `P.Value for L001 Winter` = 0.05, `H0 for L001 Winter` = 1, 
    `Stat for L001 Winter` = 0.4, `Slope for L001 Winter` = 1, 
    `P.Value for L007 Winter` = 0.05, `H0 for L007 Winter` = 1, 
    `Stat for L007 Winter` = 0.4, `Slope for L007 Winter` = 1, 
    `P.Value for L030 Winter` = 0.05, `H0 for L030 Winter` = 1, 
    `Stat for L030 Winter` = 0.4, `Slope for L030 Winter` = 1), row.names = c(NA, 
-1L), class = "data.frame")
...