【问题标题】:Reshape: “Error: index out of bounds”重塑:“错误:索引超出范围”
【发布时间】:2016-04-08 10:49:53
【问题描述】:

我有一个相当大的数据框,其结构如下:

 image       coef    v3    v4    v5    v6   ... v20
    1         A       0     1     2     3        
    1         B       2     4     6     5
    1         C       1     2     4     7
    1         D       4     5     6     4
    2         A       2     3     4     5 
    2         B       2     3     4     5 
    2         C       2     3     4     5 
    2         D       2     3     4     5 

我需要在每个图像索引的 coef 变量上使用“扁平化”结构。现在每个图像都有形状 [4:20] 的变量,但我需要它是 [1:80] 与模式 [A,B,C,D,A',B',C',D'.. .]。 像这样:

 image    v3    v4    v5    v6    v7    v8    v9    v10  ...   v80 
    1      0     2     1     4     1     4     2     5
    2      2     2     2     2     3     3     3     3

我尝试过:

reshape(df, timevar = "coef", idvar = "image", direction = "wide")

但我给了我错误:

数据[, timevar] 中的错误:子索引超出范围

我还尝试了 Reshape2 库:

dcast(df, image~coef, value.var= )

但由于我有不止一个 value.var 列,我不知道该怎么做。

【问题讨论】:

  • 我只想指出,您的 data.frame 非常整洁,非常适合使用 dplyr 进行调查或使用 ggplot2 进行绘图。确保您有正当理由更改方便的格式:)
  • @antoine-sac 是的,我确定!我想要这样,因为我正在使用数据进行机器学习,并且每个类都需要一个向量 :~~) 感谢您的建议!

标签: r dataframe reshape reshape2


【解决方案1】:

我们可以melt然后做dcast

library(data.table)
dM <- melt(setDT(df1), id.var=c("image", "coef"))
dcast(dM, image~variable+coef, value.var="value")

或使用来自reshape2recast(这是melt/dcast 的包装器)

library(reshape2)
recast(df1, id.var=c("image", "coef"),image~variable+coef, value.var="value")
#  image v3_A v3_B v3_C v3_D v4_A v4_B v4_C v4_D v5_A v5_B v5_C v5_D v6_A v6_B v6_C v6_D
#1     1    0    2    1    4    1    4    2    5    2    6    4    6    3    5    7    4
#2     2    2    2    2    2    3    3    3    3    4    4    4    4    5    5    5    5

数据

df1 <- structure(list(image = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
coef = c("A", 
"B", "C", "D", "A", "B", "C", "D"), v3 = c(0L, 2L, 1L, 4L, 2L, 
2L, 2L, 2L), v4 = c(1L, 4L, 2L, 5L, 3L, 3L, 3L, 3L), v5 = c(2L, 
6L, 4L, 6L, 4L, 4L, 4L, 4L), v6 = c(3L, 5L, 7L, 4L, 5L, 5L, 5L, 
5L)), .Names = c("image", "coef", "v3", "v4", "v5", "v6"), 
class = "data.frame", row.names = c(NA, -8L))

【讨论】:

  • 漂亮整洁!非常感谢
猜你喜欢
  • 2019-02-05
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
相关资源
最近更新 更多