我有一个带有长列名的R数据框。因此,当我打印数据框时,它太宽了。是否有一种简单的方法可以将数据框打印到屏幕上,并且多个行中出现了同名?
我知道我可以缩短名字,但不愿意。
答案 0 :(得分:2)
您可以创建自定义format.data.frame
函数,并在R找到“长”名称时修改行为:
long <- nchar(cn, "bytes") > 256L
cn[long] <- paste(substr(cn[long], 1L, 250L), "...")
names(rval) <- cn
由于在所有预处理之后将数据帧打印为矩阵,我们希望print.default
(实际上,通用print.default
)像cat一样处理转义字符(按原样打印,以获得打印\n
时的新行。
修改强>
实际上,print.default
逃脱了不可打印的角色(猫在线帮助页面)
字符串按原样输出(与print.default不同,它会转义不可打印的字符和反斜杠[...])
所以你应该开始准备自己的方法(同样,检查将R对象转换为$$ \ LaTeX $$表的选项,可能有一个选项)。
答案 1 :(得分:2)
当奥斯卡的回答被接受时,我认为它实际上可能是一个答案。不幸的是,它只是从format.daa.frame
复制代码并说“在这里做一些未指明的魔法”。这里有一些代码实际上做了一些事情,虽然我认为当时发布的内容太粗糙了。它仍然打印矩阵行和列标题。我不知道如何压制它。也许需要一种用于矩阵的黑客打印方法?
dfrm <- data.frame(reallly_long.nameeeeeeeeeeeeeeeeeeeeeeee=letters[1:5],
secondreallly_long.nameeeeeeeeeeeeeeeeeeeeeeee=letters[1:5], short=2)
pdfrm <- function(dfrm) { # first print the names broken into sections
print( unname(t(sapply( 1:(max(nchar(names(dfrm))) %/% 12),
# first construct break points to be passed to `substr`
function(rr) sapply(names(dfrm),
substr, 1+(rr-1)*10, 9+(rr-1)*10) ) )) ,quote=FALSE,
# then print with sufficient gap
print.gap=8)
# Now print a headerless data.frame with wider spacing
print( setNames(dfrm, rep(" ", length(dfrm))), print.gap = 15 )}
pdfrm(dfrm)
#------------------------------
[,1] [,2] [,3]
[1,] reallly_l secondrea short
[2,] ng.nameee lly_long.
[3,] eeeeeeeee ameeeeeee
1 a a 2
2 b b 2
3 c c 2
4 d d 2
5 e e 2
答案 2 :(得分:1)
删除矩阵行和列
我以某种方式编辑了上面42-的代码,通过创建print
函数的修改来解决删除矩阵行和列索引的问题。这是代码:
pdfrm <- function(dfrm) { # first print the names broken into sections
mprint <- function(Mn){
rownames(Mn) <- rep("",nrow(Mn))
colnames(Mn) <- rep("",ncol(M))
print(as.table(Mn),quote=FALSE,print.gap=8)
}
mprint(unname(
t(sapply( 1:(max(nchar(names(dfrm))) %/% 12),
# first construct break points to be passed to `substr`
function(rr) sapply(names(dfrm), substr, 1+(rr-1)*10, 9+(rr-1)*10) ) )))
# Now print a headerless data.frame with wider spacing
print( setNames(dfrm, rep(" ", length(dfrm))), print.gap = 15 )
}
pdfrm(dfrm)
并输出以下内容:
reallly_l secondrea short
ng.nameee lly_long.
eeeeeeeee ameeeeeee
1 a a 2
2 b b 2
3 c c 2
4 d d 2
5 e e 2
可以修改上面的代码,以便它可以处理任意和自适应的间距。