포함한 차원에 이름을 행과 열 머리글에 대한 라텍스 형식의 비상 테이블

StackOverflow https://stackoverflow.com//questions/10703802

  •  13-12-2019
  •  | 
  •  

문제

는 경우 카테고리의 속성에 대비한 테이블은 단순한 숫자만을 사용하여 이러한 숫자로 컬럼/행 헤더가 충분하지 않다--에 대한 설명은 숫자가 무엇을 의미하는지라고 합니다.아래 그림을 보여줍니다 십자가의 분류는 가구 크기는 대수은 외국인의 가정에서 샘플:

Example table

누군가 경험이 있는 생산에서 이러한 테이블을 사용하여 R+LaTeX?

도움이 되었습니까?

해결책 3

비상 테이블을 2 차원 형식의 테이블로 바꾸고 열에서 표시되는 내용 (2 차원 이상의 테이블에도 유용한)을 지정할 수있는 ftable가 있습니다.memisc 패키지는이를 멋진 LaTex로 바꾸는 데 도움이됩니다.

library(magrittr)
library(memisc)
expand.grid(Foreigners = 0:5, `Total persons` = 1:8) %>%
  cbind(Freq = rnorm(6*8, 20, 10)) %>%
  xtabs(formula = Freq~.) %>%
  ftable %>%
  toLatex
.

아무런 해킹 필요 없으며 LaTeX는 expand.grid의 열의 이름에 사용될 수 있습니다 (예 : 회전 및 / 또는 여러 행에 스패닝).생성 된 라텍스 코드는 booktabsdcolumn 패키지가 필요합니다.

컴파일 된 출력

관련 : R 의 FTable 객체에서 라텍스 테이블 만들기 .

다른 팁

저는 오히려 hackish 솔루션의,내 자신만을 보고 싶은데요 다른 접근,too.의 과정,그것은 좋은 것입니다 경우에는 변형의 이 코드를 추가하였 xtable.

나의 솔루션을 업데이트 rownames()colnames() 니다.행 헤더가 rownames()[1], 고 열 헤더가 colnames()[1].여러 가지 일들이 기억합니다:

  • 열 수에서 결과 테이블은 하나의 더 큰 경우에 사용하는 행 헤더가 있습니다.따라서, tabular 환경을 만들어야 합니다.
  • 는 경우 행 헤더에 추가되는 열 머리글에는 포함하려면 추가 &
  • 하지 않는 삭제하거나 포맷 행 또는 열 이름을 후 이 작업

add.crosstab.headers 기능든 관리할 수 있습니다.에 적용될 수 있습의 결과이 xtable() 전화입니다.일부 도우미 기능은 필요,너무입니다.

macrify <- function(m, s, bs='\\') {
  paste(bs, m, '{', s, '}', sep='')
}

boldify <- function(s) {
  macrify('textbf', s)
}

add.crosstab.headers <- function(t, row.header=NA, col.header=NA,
                                 sanitize=boldify) {
  rownames(t) <- sanitize(rownames(t))
  colnames(t) <- sanitize(colnames(t))
  if (!is.na(row.header)) {
    colnames(t)[1] <- paste('&', colnames(t)[1])
    rownames(t) <- paste('&', rownames(t))
    row.header <- sanitize(row.header)
    row.header <- macrify('rotatebox{90}', row.header)
    multirow <- macrify('multirow', nrow(t))
    multirow <- macrify(multirow, '*', bs='')
    row.header <- macrify(multirow, row.header, bs='')
    rownames(t)[1] <- paste(row.header, rownames(t)[1])
  }
  if (!is.na(col.header)) {
    col.header <- sanitize(col.header)
    multicolumn <- macrify('multicolumn', ncol(t))
    multicolumn <- macrify(multicolumn, 'c', bs='')
    col.header <- macrify(multicolumn, col.header, bs='')
    col.header <- paste(col.header, '\\\\\n')
    col.header <- paste(col.header, '&')
    if (!is.na(row.header)) {
      col.header <- paste('&', col.header)
    }
    colnames(t)[1] <- paste(col.header, colnames(t)[1])
  }
  t
}

사용은 이렇습니다.

dat <- matrix(round(rnorm(9, 20, 10)), 3, 3)
t <- xtable(dat)
t <- add.crosstab.headers(t, row.header='Foreigners', col.header='Total persons')

print.xtable(t,
             only.contents=TRUE,
             booktabs=TRUE
             , sanitize.text.function=identity
             )

여기에 하나의 접근 방식이 있습니다.일부 데이터로 시작하십시오 (질문을 게시 할 때이 작업을 수행 할 때).

dat<-matrix(round(rnorm(9,20,10)),3,3)
.

이름의 벡터를 만듭니다.매트릭스에 이름을 적용하십시오.매트릭스를 인쇄하십시오

를 인쇄하십시오
persons<-c(seq("0","2"))
foreign<-c(seq("0","2"))
dimnames(dat)<-list(persons=persons, foreign=foreign)
dat
.

xtable을 사용하여 라텍스 포맷 테이블을 출력 할 수 있습니다.

library(xtable)
xtable(dat)
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top