重塑潮汐数据

时间:2019-07-04 13:36:41

标签: r reshape tidyr

我想重塑一个非常简单的数据框,却找不到解决方法

我尝试了以下解决方案:Transposing data frames 以及所有相关的解决方案,没有运气

我有一个整洁的数据框,看起来像这样:

    df<-rbind(c('a','x1'),c('a','x2'),c('a','x3'),
    c('b','x6'),c('b','x7'))
    colnames(df)<-c('var','val')

尝试

library(dplyr)
library(tidyr)
df %>%
  gather(var, val, 2:ncol(df)) %>%
  spread_(names(data)[1], "val")

我想要一个看起来像这样的数据框:

a   x1   x2   x3  
b   x6   x7   NA

但是我得到这个错误

Error: Each row of output must be identified by a unique combination of keys

1 个答案:

答案 0 :(得分:-1)

转换为data.frame后,我们需要按顺序分组(OP的示例为matrix

library(dplyr)
library(tidyr)
library(stringr)
df %>% 
   as.data.frame %>%
   group_by(var) %>% 
   mutate(rn = str_c("col", row_number()))  %>% 
   spread(rn, val)
# A tibble: 2 x 4
# Groups:   var [2]
#  var   col1  col2  col3 
#  <fct> <fct> <fct> <fct>
#1 a     x1    x2    x3   
#2 b     x6    x7    <NA>