如何将表转换为数据框
我在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
我想摆脱x
和y
,并将其转换为与上面(三行四列)完全相同但没有x
或y
的数据框。 如果我使用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)
返回TRUE
, as.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与基类有一些小的变化)