R 如何排列键和值长度相等的列(不创建ID)?

R 如何排列键和值长度相等的列(不创建ID)?,r,tidyr,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 ab 1 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
ab
1     2     2
2     1     1
3     4     4
但我得到了一个错误:

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


有没有一种方法可以实现将数据集分散到长度相等的列中?我不知道为什么在这种特殊情况下会出现重复标识符的问题。

函数尝试确定值应该放在哪一行,并尝试使用
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
库(tidyverse)
df=tibble(var1=c('a','a','a','b','b','b'),value=c(2,1,4,2,1,4))
df%>%
分组依据(var1)%>%
变异(id=行号())%>%
价差(var1,value)
##tibble:3 x 3
#身份证
# *   
# 1     1     2     2
# 2     2     1     1
# 3     3     4     4
df%>%
分组依据(var1)%>%
变异(id=n():1)%>%
价差(var1,value)
##tibble:3 x 3
#身份证
# *   
# 1     1     4     4
# 2     2     1     1
# 3     3     2     2

函数
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
库(tidyverse)
df=tibble(var1=c('a','a','a','b','b','b'),value=c(2,1,4,2,1,4))
df%>%
分组依据(var1)%>%
变异(id=行号())%>%
价差(var1,value)
##tibble:3 x 3
#身份证
# *   
# 1     1     2     2
# 2     2     1     1
# 3     3     4     4
df%>%
分组依据(var1)%>%
变异(id=n():1)%>%
价差(var1,value)
##tibble:3 x 3
#身份证
# *   
# 1     1     4     4
# 2     2     1     1
# 3     3     2     2

如果您添加一个行号列,它会起作用:
DF%%>%groupby(var1)%%>%mutate(rid=row_number())%%>%spread(var1,value)
@Frank Ok我正试图避免这种情况(可能标题不清楚),不知道我是否忽略了一些可以替代的参数。谢谢啊,好吧,我只是瞥了一眼身体,错过了标题中的那一点。我不确定需要ID的原因,但安东尼奥斯在下面很好地解释了这一点。(行和列这两个边距都需要VAR来消除输出布局的歧义。这与Reformae2&data.table中的
dcast
是一样的。)如果添加一个行号列,它会起作用:
DF%%>%groupby(var1)%%>%mutate(rid=row\u number())%%>%spread(var1,value)
@Frank Ok我试图避免这种情况(可能标题不清楚)我想知道我是否忽略了一些我可以使用的论点。谢谢!啊,好吧,我只是瞥了一眼主体,错过了标题中的那一点。我不确定需要ID的原因,但安东尼奥斯在下面很好地解释了这一点。(行和列这两个边距都需要变量,以消除输出布局的歧义。这与整形2&data.table中的
dcast
相同。)