我正在尝试传播此数据集以用于演示目的:
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)的重复标识符
有没有办法为数据集实现这一点,这些数据集会扩展到相等长度的列中?我不确定为什么在这种特殊情况下重复的标识符会成为一个问题。
答案 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