为了账号安全,请及时绑定邮箱和手机立即绑定

如何将表转换为数据框

如何将表转换为数据框

MYYA 2019-10-16 10:54:04
我在R中有一张桌子有str()这个: table [1:3, 1:4] 0.166 0.319 0.457 0.261 0.248 ... - attr(*, "dimnames")=List of 2  ..$ x: chr [1:3] "Metro >=1 million" "Metro <1 million" "Non-Metro Counties"  ..$ y: chr [1:4] "q1" "q2" "q3" "q4"当我打印时看起来像这样:                    yx                           q1        q2        q3        q4  Metro >=1 million  0.1663567 0.2612212 0.2670441 0.3053781  Metro <1 million   0.3192857 0.2480012 0.2341030 0.1986102  Non-Metro Counties 0.4570341 0.2044960 0.2121102 0.1263597我想摆脱x和y并将其转换成数据帧,看起来完全一样,上面的(三排,四列),但没有x或y。如果我使用as.data.frame(mytable),我会得到这个:                    x  y      Freq1   Metro >=1 million q1 0.16635672    Metro <1 million q1 0.31928573  Non-Metro Counties q1 0.45703414   Metro >=1 million q2 0.26122125    Metro <1 million q2 0.24800126  Non-Metro Counties q2 0.20449607   Metro >=1 million q3 0.26704418    Metro <1 million q3 0.23410309  Non-Metro Counties q3 0.212110210  Metro >=1 million q4 0.305378111   Metro <1 million q4 0.198610212 Non-Metro Counties q4 0.1263597我可能从根本上不了解表与数据帧之间的关系。
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

我已经知道了:


as.data.frame.matrix(mytable) 

满足我的需要-显然,该表需要以某种方式转换为矩阵,以便适当地转换为数据帧。我在Computational Ecology博客上发现了有关列联表as.data.frame.matrix()函数的更多详细信息。


查看完整回答
反对 回复 2019-10-16
?
PIPIONE

TA贡献1829条经验 获得超9个赞

尽管在这种情况下结果会有所不同,因为列名是数字,但我使用的另一种方法是data.frame(rbind(mytable))。使用@XX中的示例:


> freq_t = table(cyl = mtcars$cyl, gear = mtcars$gear)


> freq_t

   gear

cyl  3  4  5

  4  1  8  2

  6  2  4  1

  8 12  0  2


> data.frame(rbind(freq_t))

  X3 X4 X5

4  1  8  2

6  2  4  1

8 12  0  2

如果列名不是以数字开头,则不X会将其添加到它们的前面。


查看完整回答
反对 回复 2019-10-16
?
www说

TA贡献1775条经验 获得超8个赞

简短的答案:使用as.data.frame.matrix(mytable)@Victor Van Hee建议的。


长答案:as.data.frame(mytable)可能无法在table()函数生成的列联表上使用,即使is.matrix(your_table)return TRUE。它仍然会将您的表融为一体factor1 factor2 factori counts。


例:


> freq_t = table(cyl = mtcars$cyl, gear = mtcars$gear)


> freq_t

   gear

cyl  3  4  5

  4  1  8  2

  6  2  4  1

  8 12  0  2


> is.matrix(freq_t)

[1] TRUE


> as.data.frame(freq_t)

  cyl gear Freq

1   4    3    1

2   6    3    2

3   8    3   12

4   4    4    8

5   6    4    4

6   8    4    0

7   4    5    2

8   6    5    1

9   8    5    2

> as.data.frame.matrix(freq_t)

   3 4 5

4  1 8 2

6  2 4 1

8 12 0 2


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 559 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信