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

How to spread columns with key and value of equal length (without creating ids)?

我正在尝试传播此数据集以供演示之用:

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

但是我得到错误:

Error: Duplicate identifiers for rows (1, 2, 3), (4, 5, 6)

有没有一种方法可以让数据集散布成等长的列?我不确定为什么在这种特殊情况下重复标识符会成为问题。

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