【问题标题】:Tabulate a data frame in R将 R 中的数据框制成表格
【发布时间】:2013-05-29 16:30:51
【问题描述】:

我想将数据制成表格,以便一个因子变量成为列,并在单元格中保留另一个变量的值。

所以我尝试了,

a=rep(1:3,3)
d<-rep(1:3, each=3)
b=rnorm(9)
c=runif(9)
dt<-data.frame(a,d,b,c)

  a d          b         c
1 1 1  0.3819762 0.5199602
2 2 1  0.3896063 0.9144730
3 3 1  2.4356972 0.2888464
4 1 2  1.2697016 0.9831191
5 2 2 -1.9844689 0.2046947
6 3 2  0.3473766 0.4766178
7 1 3 -1.5461235 0.6187189
8 2 3  1.0829027 0.9089551
9 3 3 -0.1305324 0.6326141

我寻找了data.tableplyrreshape2,但找不到我想做的事情。所以,我做了旧的循环方式。

mat<-matrix(NA, nrow=3, ncol=4)


for (i in 1:3){
  mat[i,1]<-i
  for (j in 1:3){
    val=dt[a==i & d==j,3]
    mat[i,j+1]<-val

  }

}



mat
     [,1]      [,2]       [,3]       [,4]
[1,]    1 0.3819762  1.2697016 -1.5461235
[2,]    2 0.3896063 -1.9844689  1.0829027
[3,]    3 2.4356972  0.3473766 -0.1305324

...大数据需要很长时间。

还有更好的选择吗??

【问题讨论】:

    标签: r data-manipulation


    【解决方案1】:

    这是一个data.table 选项:

    library(data.table)
    dt = data.table(dt)
    
    dt[, as.list(b), by = a]
    

    【讨论】:

      【解决方案2】:

      这也可以在基础 R 中完成:

      reshape(dt,timevar="d",idvar="a",drop="c",direction="wide")
      

      对于您的数据,这给出了...

        a       b.1        b.2        b.3
      1 1 0.3819762  1.2697016 -1.5461235
      2 2 0.3896063 -1.9844689  1.0829027
      3 3 2.4356972  0.3473766 -0.1305324
      

      请在绘制模拟数据之前使用set.seed,这样更容易重现。

      我不知道这个解决方案会很快。此外,要在将来使用它,您必须习惯这些令人困惑的参数名称(“timevar”、“idvar”等),这些名称可能无法描述您大部分时间实际上在做什么......

      【讨论】:

      • 谢谢,是的。我看到即使使用这些包我也无法弄清楚这些参数名称。
      【解决方案3】:

      使用 reshape2

      > library(reshape2)
      > dcast(dt, a ~ d, value.var = "b")
        a         1          2          3
      1 1 0.3819762  1.2697016 -1.5461235
      2 2 0.3896063 -1.9844689  1.0829027
      3 3 2.4356972  0.3473766 -0.1305324
      

      【讨论】:

        猜你喜欢
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-30
        • 1970-01-01
        相关资源
        最近更新 更多