Разбить строки на столбцы в R - PullRequest
0 голосов
/ 16 ноября 2018

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

library(tidyverse)

tibble(
  var = rep(letters[1:2],3),
  vals = c(1:6)
) %>% 
  arrange(var)

# A tibble: 6 x 2
  var    vals
  <chr> <int>
1 a         1
2 a         3
3 a         5
4 b         2
5 b         4
6 b         6

Проблема в том, что мне нужно превратить a и b в столбцы, как в этом ожидаемом выводе :

# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1     2
2     3     4
3     5     6

Я пытался сделать это с tidyr::spread, но безуспешно. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Нам нужен столбец последовательности после группировки по 'var'.Это также гарантирует, что для групп, которые не имеют одинаковое количество элементов, оставшиеся значения могут быть заполнены значением выбора (по умолчанию это NA)

library(tidyverse)
tbl %>% 
  group_by(var) %>% 
  mutate(rn = row_number()) %>% 
  spread(var, vals) %>% 
  select(-rn)
# A tibble: 3 x 2
#      a     b
#  <int> <int>
#1     1     2
#2     3     4
#3     5     6

data

tbl <- tibble(
  var = rep(letters[1:2],3),
  vals = c(1:6)
   ) %>% 
     arrange(var)
0 голосов
/ 16 ноября 2018

Вы можете использовать unstack

tbl <- tibble(
  var = rep(letters[1:2],3),
  vals = c(1:6)
) %>% 
  arrange(var)

unstack(tbl, vals ~ var)
#  a b
#1 1 2
#2 3 4
#3 5 6
...