【问题标题】:reshape a matrix in R and converting every n rows into one row重塑R中的矩阵并将每n行转换为一行
【发布时间】:2019-03-21 17:05:18
【问题描述】:

我有一个数据框df,比如:

year     location
1           A
2           B
3           C
------------------
1           X
5           A
10          F
------------------
3          F
5          x
2          y

我想把它改造成

year_1  location_1     year_2   location_2    year_3  location_3
1         A             2         B               3      F
3         C             1         X               5      X
5         A             10        F               2      Y

我可以做一个hack,连接前两列,然后做

d <- matrix(df, nrow = 70, byrow = FALSE)

但稍后我必须拆分连接的东西,有没有一种巧妙的方法?

【问题讨论】:

    标签: r reshape melt dcast


    【解决方案1】:

    拆分和重组如何:

     wide.df <- Reduce(cbind, split(df, cumsum( rep(c(1,0,0), nrow(df)/3) ) )
    

    与强制转换到矩阵和反向转换到数据帧相比,这将具有优势,因为它不会对因素或字符弄乱类有任何困难。使用矩阵作为中间体首先会失去所有级别,如果你同时拥有字符和因素,你会遇到一个非常混乱的混乱。

    如果您需要确切的结果,您可能需要稍微修改列名,如果您发布了可复制粘贴的 [MCVE],我很乐意为您提供帮助

    【讨论】:

    • 谢谢你,你太棒了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多