मेरे पास मेरे बजाय एक हैकिश समाधान है, लेकिन मैं अन्य दृष्टिकोण भी देखना चाहता हूं। बेशक, यह अच्छा होगा अगर इस कोड का एक संस्करण 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
)
निश्चित रूप से मुझे एक न्यूनतम कार्य उदाहरण पोस्ट करना चाहिए था। ऐसा करने के लिए खेद है। अगर आप अपना उदाहरण अनुकूलित करते हैं तो क्या आपको बुरा लगता है? - जेनरेटेड एक्स्टेबल में आयाम नाम शामिल नहीं हैं, हालांकि। – krlmlr
कोई समस्या नहीं है। और हाँ, मुझे बाद में एहसास हुआ कि लेटेक्स आउटपुट में आयाम नाम शामिल नहीं हैं। मेरा दृष्टिकोण संभवतः टेक्क्स में ठीक करने के लिए होगा, हालांकि यदि आप समझते हैं कि इसे सीधे एक्स्टेबल का उपयोग करके कैसे किया जाए तो मुझे बताएं। – charlie
'xtable' समाधान के लिए अपना स्वयं का उत्तर देखें। – krlmlr