我在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"
Run Code Online (Sandbox Code Playgroud)
当我打印它时看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
我想摆脱x
和y
并将其转换成数据帧,看起来完全一样,上面的(三排,四列),但没有x
或y
.如果我使用as.data.frame(mytable)
,而是我得到这个:
x y 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
Run Code Online (Sandbox Code Playgroud)
我可能从根本上不了解表与数据帧的关系.
Vic*_*Hee 288
我已经弄清楚了:
as.data.frame.matrix(mytable)
Run Code Online (Sandbox Code Playgroud)
做我需要的 - 显然,表需要以某种方式转换为矩阵,以便适当地转换为数据框.我在Computational Ecology博客上找到了关于这个偶然表的as.data.frame.matrix()函数的更多细节.
BLT*_*BLT 12
虽然结果在这种情况下有所不同,因为列名是数字,我使用的另一种方式是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
Run Code Online (Sandbox Code Playgroud)
如果列名称不以数字开头,则不X
会将它们添加到它们的前面.
X.X*_*X.X 11
简短回答:as.data.frame.matrix(mytable)
正如@Victor Van Hee建议的那样使用.
答案很长:as.data.frame(mytable)
可能不适用于table()
函数生成的列联表,即使is.matrix(your_table)
返回也是如此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
Run Code Online (Sandbox Code Playgroud)
如果您使用的是tidyverse,则可以使用
as_data_frame(table(myvector))
Run Code Online (Sandbox Code Playgroud)
得到一个tibble(即一个与基类有一些微小变化的数据框)
归档时间: |
|
查看次数: |
194742 次 |
最近记录: |