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

В настоящее время я пытаюсь преобразовать один из столбцов в моих данных в строку в качестве наблюдения. Ниже представлен типичный пример того, как выглядят мои данные:

library(tidyverse)
test_df <- tibble(unit_name=rep("Chungcheongbuk-do"),unit_n=rep(2),
               can=c("Cho Bong-am","Lee Seung-man","Lee Si-yeong","Shin Heung-woo"),
               pev1=rep(510014),vot1=rep(457815),vv1=rep(445955),
               ivv1=rep(11860),cv1=c(25875,386665,23006,10409),
               abstention=rep(52199))

Как видно выше, столбец abstention существует в конце моего фрейма данных, и я хотел бы, чтобы мои данные выглядели следующим образом :

library(tidyverse)
desired_df <- tibble(unit_name=rep("Chungcheongbuk-do"),unit_n=rep(2),
                     can=c("Cho Bong-am","Lee Seung-man","Lee Si-yeong","Shin Heung-woo","abstention"),
                     pev1=rep(510014),vot1=rep(457815),vv1=rep(445955),
                     ivv1=rep(11860),cv1=c(25875,386665,23006,10409,52199))

Здесь воздержавшиеся рассматриваются как кандидат в can столбце . Таким образом, остальные данные сохраняются, а значения воздержания являются их собственным наблюдением в столбце cv1.

Я пробовал использовать pivot_wider, но я не уверен, как использовать аргументы для получения что я хочу. Я также подумал, что t() переместит столбец в строку, но мне также трудно вернуть его обратно в мои данные. Любая помощь приветствуется! Спасибо!

1 Ответ

1 голос
/ 14 июля 2020

Вот стратегия, которая будет работать, если у вас есть несколько unit_names

test_df %>% 
  group_split(unit_name) %>%
  map( function(group_data) {
    slice(group_data, 1) %>% 
      mutate(can="abstention", cv1=abstention) %>% 
      add_row(group_data, .) %>%
      select(-abstention)
  }) %>% 
  bind_rows()

В основном мы разделяем данные по unit_name, затем берем первую строку для каждой группы и перемещаем значения. Добавьте это как новую строку в каждую группу, а затем повторно объедините все группы.

...