Хитро для цикла в R / добавление в dataframe - PullRequest
0 голосов
/ 11 октября 2018

Новичок в R здесь.Я собираюсь сделать следующее:

У меня есть набор данных, назовем его dataset1, и я хочу создать новый фрейм данных (dataset2).В наборе данных1 указаны имена людей, а затем состояния, в которых они находятся (таким образом, существуют дублированные состояния, но нет дублирующейся комбинации имен / состояний).В каждом штате не более 3 человек.В наборе данных 2 я ищу создание новых столбцов с именами person1, person2, person3, связанных с каждым состоянием (то есть: каждое состояние имеет только одну строку).Итак, если Алиса, Боб и Кэти из Алабамы, а затем Дэйв и Эдвин из Аляски, должно быть два ряда: один для Алабамы, один для Аляски, а затем person1 .... person3 будет иметь свои имена в нем(и последний столбец p3 для Аляски будет пустым).

Я пытаюсь сохранить имя состояния как фиктивную переменную, а затем с помощью оператора if отсортировать строки набора данных1, а затемдобавление набора данных по мере необходимости.Что-то подсказывает мне, однако, есть более краткий способ сделать это, а не использовать операторы for / if.

Любая помощь?

1 Ответ

0 голосов
/ 11 октября 2018

Звучит так, будто вам нужно перевести данные из длинного формата в широкоформатный.

Вот некоторые фальшивые данные:

set.seed(42)
df <- data.frame(stringsAsFactors = F,
  states = sample(state.name, size = 100, replace = T),
  people = sample(LETTERS, size = 100, replace = T)
  )

Вот подход, который группирует по состоянию, помечает ли ониPerson1 или Person2 и т. д., а затем распределяет их по столбцам

library(tidyr); library(dplyr)
df2 <- df %>%
  group_by(states) %>%
  mutate(person = paste0("Person", row_number())) %>%
  ungroup() %>%
  spread(person, people, fill = "")

Вывод:

> df2
# A tibble: 44 x 6
   states   Person1 Person2 Person3 Person4 Person5
   <chr>    <chr>   <chr>   <chr>   <chr>   <chr>  
 1 Alabama  Q       R       P       P       K      
 2 Alaska   R       M       K       L       C      
 3 Arkansas O       ""      ""      ""      ""     
 4 Colorado X       U       F       ""      ""     
 5 Delaware O       ""      ""      ""      ""     
 6 Georgia  L       N       V       O       ""     
 7 Hawaii   G       ""      ""      ""      ""     
 8 Idaho    W       L       J       C       ""     
 9 Illinois V       ""      ""      ""      ""     
10 Indiana  Y       Y       U       ""      ""    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...