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
相同。)