如何使用键和相等长度的值传播列(不创建ID)?

时间:2017-11-02 16:46:32

标签: r tidyr

我正在尝试传播此数据集以用于演示目的:

library(tibble)
library(tidyr)
tibble(var1 = c('a', 'a', 'a', 'b','b', 'b'), value=c(2,1,4,2,1,4)) %>% 
spread(var1, value)

最终我想

    a     b
  <chr> <dbl>
1     2     2
2     1     1
3     4     4

但我收到错误:

  

错误:行(1,2,3),(4,5,6)的重复标识符

有没有办法为数据集实现这一点,这些数据集会扩展到相等长度的列中?我不确定为什么在这种特殊情况下重复的标识符会成为一个问题。

1 个答案:

答案 0 :(得分:1)

spread函数尝试识别值应该在哪一行,并尝试使用var1作为行的标识符

正如@Frank所提到的,您需要创建此列以用作标识符。行的标识符表示您提供的数字将影响值的顺序。

检查此示例:

library(tidyverse)

df = tibble(var1 = c('a', 'a', 'a', 'b','b', 'b'), value=c(2,1,4,2,1,4)) 

df %>%
  group_by(var1) %>%
  mutate(id = row_number()) %>%
  spread(var1, value)

# # A tibble: 3 x 3
#     id     a     b
# * <int> <dbl> <dbl>
# 1     1     2     2
# 2     2     1     1
# 3     3     4     4

df %>%
  group_by(var1) %>%
  mutate(id = n():1) %>%
  spread(var1, value)

# # A tibble: 3 x 3
#      id     a     b
# * <int> <dbl> <dbl>
# 1     1     4     4
# 2     2     1     1
# 3     3     2     2