【问题标题】:Converting (cross) table into list view [duplicate]将(交叉)表转换为列表视图[重复]
【发布时间】:2013-02-20 07:19:42
【问题描述】:

过去我问过一个关于如何create cross tables from a list view 的问题。建议我为此使用xtabs,效果很好。今天,我一直在寻找相反的方法并从交叉表创建列表视图表。我希望找到一个反向公式,但没有成功。我相信有一个预定义的功能,但无法找到它。

我有下表:

# load table     
crosstable <- structure(list(col1 = c(0, 0, 1, 0, 0, 0, 0, 0, 0), col2 = c(0, 1, 0, 0, 0, 0, 0, 0, 0), col3 = c(0, 0, 0, 0, 0, 0, 0, 0, 1), col4 = c(1, 0, 0, 0, 0, 0, 0, 0, 0), col5 = c(0, 0, 0, 0, 0, 0, 0, 1, 0), col6 = c(0, 0, 0, 0, 0, 1, 0, 0, 0), col7 = c(0, 0, 0, 0, 1, 0, 0, 0, 0), col8 = c(0, 0, 0, 0, 0, 0, 1, 0, 0)), .Names = c("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8"), row.names = c("row1", "row2", "row3", "row4", "row5", "row6", "row7", "row8", "row9"), class = "data.frame")

#display table
crosstable

     col1 col2 col3 col4 col5 col6 col7 col8
row1    0    0    0    1    0    0    0    0
row2    0    1    0    0    0    0    0    0
row3    1    0    0    0    0    0    0    0
row4    0    0    0    0    0    0    0    0
row5    0    0    0    0    0    0    1    0
row6    0    0    0    0    0    1    0    0
row7    0    0    0    0    0    0    0    1
row8    0    0    0    0    1    0    0    0
row9    0    0    1    0    0    0    0    0

我想将其转换为显示如下内容的表格:

row1 col1 0
row1 col2 0
row1 col3 0
row1 col4 1
row1 col5 0
...

谁能指出我的功能方向,这将有助于实现这一目标?

【问题讨论】:

  • 类似data.frame(rows = rownames(crosstable), stack(crosstable))?
  • 你是如何得到这个“交叉表”对象的?如果您使用xtabs,您可能只能使用data.frame(xtabs(blah blah blah))
  • 交叉表对象来自矩阵crosstable &lt;- data.frame(matrix)
  • @JoshO'Brien,我以为我最近回答了这样一个问题;)
  • @AnandaMahto -- 是的,我已经看到并喜欢你的回答,所以只需点击你的名字并将“堆栈”添加到搜索栏中即可找到它!

标签: r crosstab


【解决方案1】:

坚持使用base R,可以使用stack

CTLong <- data.frame(rows = rownames(crosstable), stack(crosstable))
CTLong <- CTLong[order(CTLong$rows), ]
head(CTLong)
   rows values  ind
1  row1      0 col1
10 row1      0 col2
19 row1      0 col3
28 row1      1 col4
37 row1      0 col5
46 row1      0 col6

【讨论】:

    【解决方案2】:

    您可以使用reshape2::melt 获取:

    library(reshape2)
    melt(cbind(rownames(crosstable),crosstable))
    # Using rownames(crosstable) as id variables
    #    rownames(crosstable) variable value
    # 1                  row1     col1     0
    # 2                  row2     col1     0
    # 3                  row3     col1     1
    # 4                  row4     col1     0
    # 5                  row5     col1     0
    # 6                  row6     col1     0
    # 7                  row7     col1     0
    # ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 2019-07-25
      • 1970-01-01
      • 2018-02-28
      • 2016-08-29
      相关资源
      最近更新 更多