Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 三年期利差不汇总数据_R_Tidyr - Fatal编程技术网

R 三年期利差不汇总数据

R 三年期利差不汇总数据,r,tidyr,R,Tidyr,我有以下数据: > data <- data.frame(unique=1:9, grouping=rep(c('a', 'b', 'c'), each=3), value=sample(1:30, 9)) > data unique grouping value 1 1 a 15 2 2 a 21 3 3 a 26 4

我有以下数据:

    > data <- data.frame(unique=1:9, grouping=rep(c('a', 'b', 'c'), each=3), value=sample(1:30, 9))
    > data
      unique grouping value
    1      1        a    15
    2      2        a    21
    3      3        a    26
    4      4        b     8
    5      5        b     6
    6      6        b     4
    7      7        c    17
    8      8        c     1
    9      9        c     3
我正在使用tidyr::spread,但没有得到正确的结果:

> data %>% spread(grouping, value)
  unique  a  b  c
1      1 15 NA NA
2      2 21 NA NA
3      3 26 NA NA
4      4 NA  8 NA
5      5 NA  6 NA
6      6 NA  4 NA
7      7 NA NA 17
8      8 NA NA  1
9      9 NA NA  3


当一个组(c)的长度与其他组(c)的长度不同时,是否也有办法做到这一点?

我们需要创建一个序列列以避免重复标识符行错误

library(tidyr)
library(dplyr)
data %>% 
    group_by(grouping) %>% 
    mutate(id = row_number()) %>% 
    select(-unique) %>%
    spread(grouping, value) %>%
    select(-id)
#     a     b     c
#  (int) (int) (int)
#1    15     8    17
#2    21     6     1
#3    26     4     3
> data %>% select(grouping, value) %>% spread(grouping, value)
Error: Duplicate identifiers for rows (1, 2, 3), (4, 5, 6), (7, 8, 9)
library(tidyr)
library(dplyr)
data %>% 
    group_by(grouping) %>% 
    mutate(id = row_number()) %>% 
    select(-unique) %>%
    spread(grouping, value) %>%
    select(-id)
#     a     b     c
#  (int) (int) (int)
#1    15     8    17
#2    21     6     1
#3    26     4     3