【问题标题】:Reshaping tidyr data [duplicate]重塑 tidyr 数据
【发布时间】:2019-11-15 06:27:47
【问题描述】:

我想重塑一个非常简单的数据框,但找不到这样做的方法

我试过这个解决方案: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

【问题讨论】:

  • 仅供参考,您的 df 是矩阵而不是数据框
  • @Sotos:我试图在这里简化我拥有的实际数据框。抱歉我的无知,但是将我拥有的数据框转换为矩阵会简化问题的解决?
  • 不,它需要是一个data.frame。不过没问题。我明白你在问什么。我只是在寻找一个重复的目标,因为这看起来像是以前问过的问题:)

标签: r reshape tidyr


【解决方案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> 

【讨论】:

  • 我在这里投反对票的原因是因为我认为您的回答欺骗实际上会在网站上产生很多噪音,因此无济于事。添加了一个明确的欺骗(OP 说他有一个数据框,但为了简单起见将矩阵放在这里 - 或者他认为)并且您的重新打开在我看来是不合理的,因此投反对票。您分享的另一个链接,而不是我的反对意见。谢谢。
  • 它是一个矩阵,它必须经过几个步骤,并注意您的序列创建是针对该欺骗中的行索引和列的注释
  • 好的。你的意见。让我们同意不同意:)祝你有美好的一天
猜你喜欢
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多