IT박스

테이블을 데이터 프레임으로 변환하는 방법

itboxs 2020. 6. 14. 11:13
반응형

테이블을 데이터 프레임으로 변환하는 방법


나는 이것을 가지고 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)하면 대신 이것을 얻습니다.

                    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

아마도 기본적으로 테이블이 데이터 프레임과 어떻게 관련되는지 이해하지 못합니다.


나는 이미 알아 냈습니다.

as.data.frame.matrix(mytable) 

내가 필요한 것을 수행합니다-분명히 데이터 프레임으로 적절하게 변환하려면 테이블을 행렬로 변환해야합니다. Computational Ecology 블로그에서 우발성 테이블에 대한 as.data.frame.matrix () 함수에 대한 자세한 내용을 찾았습니다 .


짧은 대답 : as.data.frame.matrix(mytable)@Victor Van Hee이 제안한대로을 사용 합니다.

긴 대답 : 반환 하더라도 함수에 as.data.frame(mytable)의해 생성 된 우발성 테이블에서는 작동하지 않을 수 있습니다 . 여전히 테이블을 형식 으로 녹 입니다.table()is.matrix(your_table)TRUEfactor1 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앞에 숫자 가 추가되지 않습니다.


tidyverse를 사용하는 경우

as_data_frame(table(myvector))

티블 을 얻는 (즉, 기본 클래스에서 약간의 변형이있는 데이터 프레임)

참고 URL : https://stackoverflow.com/questions/10758961/how-to-convert-a-table-to-a-data-frame

반응형