如何传播具有相等长度的键和值的列(不创建 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
我正在尝试传播此数据集以供演示之用:
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