如何将表转换为数据框

我在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" 

我打印时看起来像这样:

  y x 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 

我想摆脱xy ,并将其转换为与上面(三行四列)完全相同但没有xy的数据框。 如果我使用as.data.frame(mytable) ,而是我得到这个:

  xy Freq 1 Metro >=1 million q1 0.1663567 2 Metro <1 million q1 0.3192857 3 Non-Metro Counties q1 0.4570341 4 Metro >=1 million q2 0.2612212 5 Metro <1 million q2 0.2480012 6 Non-Metro Counties q2 0.2044960 7 Metro >=1 million q3 0.2670441 8 Metro <1 million q3 0.2341030 9 Non-Metro Counties q3 0.2121102 10 Metro >=1 million q4 0.3053781 11 Metro <1 million q4 0.1986102 12 Non-Metro Counties q4 0.1263597 

我可能从根本上不理解表与数据框的关系。

我已经知道了:

 as.data.frame.matrix(mytable) 

做我所需要的 – 显然,表需要以某种方式转换为matrix,以便适当地翻译成数据框。 我在Computational Ecology博客上发现了关于这个as.data.frame.matrix()函数的更多细节。

简单的回答:使用as.data.frame.matrix(mytable) ,就像@Victor Van Heebuild议的那样。

长答案:即使is.matrix(your_table)返回TRUEas.data.frame(mytable)可能无法在由table()函数生成的table()联表上工作。 它仍然会融化成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 

虽然结果在这种情况下有所不同,因为列名是数字,我使用的另一种方法是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不会被添加到前面。

如果你使用的是反转 ,你可以使用

 as_data_frame(table(myvector)) 

得到一个tibble (即一个dataframe与基类有一些小的变化)