![](/img/trans.png)
[英]Right way to convert data.frame to a numeric matrix, when df also contains strings?
[英]xtable - digits in data.frame that also contains strings
我有一個包含數字和字符串的data.frame,我想控制xtable打印中的數字。 由於某種原因,xtable似乎忽略了digits=2
命令。 看到:
\documentclass{article}
\begin{document}
<<echo=F, results='asis'>>=
library("xtable")
df <- data.frame(matrix( c("aaa", "bbb", seq(0.1, 1, length.out=6) ), 2, 4) )
print(xtable(df, digits=2))
print(xtable(df, digits=c(0, 0, 2, 2, 2)))
@
\end{document}
兩次打印都不會影響輸出中的位數,即兩個逗號后面的零都應為零,例如0.1和1。我希望它分別為0.10和1.00,以便所有數字具有相同的長度。
盡管當data.frame中沒有字符串時, digits=2
命令仍然可以完美地工作。 看到:
df2 <- data.frame(matrix( seq(0.1, 1, length.out=6), 2, 3) )
print(xtable(df2, digits=2))
我正在尋找的是一種在xtable中打印data.frame的方法,該方法的確包含所有數字均為2的數字的字符串。
有人知道解決方案嗎?
在您的示例中,您是從一個字符矩陣創建數據框架的,該字符矩陣的每一列都是一個字符。 Xtable不知道如何將數字應用於字符。 嘗試從一開始就將data.frame定義為data.frame,然后數字列將是數字,字符列將是character。 這應該工作:
df <- data.frame(X1 = c("aaa", "bbb"),X2 = c(0.1,0.28),X3 = c(0.46,0.64), X4 = c(0.82, 1))
print(xtable(df, digits=2))
根據要求,一種將全字符數據幀轉換為字符列和數字列混合的快速方法:
df[] <- lapply(df, function(x) if (anyNA(y <- as.numeric(x))) x else y)
還有另一個在data.table
包中更優雅的解決方案:
library(data.table)
setDT(df)[, lapply(.SD, function(x) if(anyNA(y <- as.numeric(x))) x else y)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.