【问题标题】:R: multi-index on columns and/or rowsR:列和/或行的多索引
【发布时间】:2015-06-19 17:46:07
【问题描述】:

python 中,更具体地说,在pandas 中,我可以在行或列上使用MultIndexR 中是否有等价物?我查看了几个教程,例如 https://en.wikibooks.org/wiki/R_Programming/Working_with_data_frames 中的教程,但我找不到合适的 R 等价物。

例如,我有以下数据框:

   A-1  A-2 B-1 B-2
0  1    2    0   1
1  2    0    1   3
2  4    1    3   2

我希望它看起来像:

   A         B
   1    2    1   2
0  1    2    0   1
1  2    0    1   3
2  4    1    3   2

我从 stackoverflow 中找到的其他相关答案

  1. Set columns as index
  2. Paste multiple columns to an index

【问题讨论】:

  • MultiIndex 的强大功能是 python/pandas 在数据操作方面有时优于 R 的原因之一。 R 不支持同类型的分层索引。
  • @user227710 这看起来很有希望。这个tables 包是否还允许您对行进行多索引?
  • @tegancp 嗯,我明白了。我主要是在寻找一些工作。我个人喜欢pandas 中的MultiIndex 功能
  • R 提供了一个数组类,它可能提供一些所示的功能,但没有一个可以立即显示的打印方法,如您所演示的。有一个ftable 函数允许“展平”更高维度的表格。

标签: r dataframe


【解决方案1】:

鉴于您正在寻找一种“变通”的方法,我会给您一个公认有限的方法。 R中的数组只能保持一种模式(与大多数人的理解相反可以包括列表)

>   arr1 <- matrix(scan(), 3,byrow=TRUE) 
1:   1    2    0   1
5:   2    0    1   3
9:   4    1    3   2
13: 
Read 12 items
> arr2 <- array(arr1, c(3,2,2))  # Re-dimensioning can also be done with `dim<-`
> arr2
, , 1

     [,1] [,2]
[1,]    1    2
[2,]    2    0
[3,]    4    1

, , 2

     [,1] [,2]
[1,]    0    1
[2,]    1    3
[3,]    3    2

> dimnames(arr2) <- list( rows=0:2, subcat=1:2, majorcat=c("A","B") )
> arr2
, , majorcat = A

    subcat
rows 1 2
   0 1 2
   1 2 0
   2 4 1

, , majorcat = B

    subcat
rows 1 2
   0 0 1
   1 1 3
   2 3 2

设置完成后,有一个显示方法可以提供您所要求的内容:

> ftable(arr2, row.vars=1)
     subcat   1   2  
     majorcat A B A B
rows                 
0             1 0 2 1
1             2 1 0 3
2             4 3 1 2

看起来我需要以不同的方式指定它:

> ftable(arr2, row.vars=1, col.vars=3:2)
     majorcat A   B  
     subcat   1 2 1 2
rows                 
0             1 2 0 1
1             2 0 1 3
2             4 1 3 2

【讨论】:

  • 太棒了!我知道我没有在问题中提到这一点,但为了将其导出到 csv/excel 我猜我需要执行以下操作? stackoverflow.com/a/28640799/2423379
  • 如果它没有按预期粘贴,Excel 有一个非常简洁的固定宽度导入向导。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 2020-08-27
  • 2020-08-30
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多