gpt4 book ai didi

r - 在数据框打印期间缩写列名

转载 作者:行者123 更新时间:2023-12-05 01:02:06 24 4
gpt4 key购买 nike

R 的 abbreviate() 可用于将数据框的列名截断为设定长度,并进行良好的检查以确保唯一性等:

abbreviate(names(dframe), minlength=2)

当然,可以使用此函数就地缩写列名,然后打印出更改后的数据框
>>names(dframe) <- abbreviate(names(dframe), minlength=2)
>>dframe

但我想打印出带有缩写列名的数据框,而不在此过程中更改数据框。希望这可以通过 print() 调用中的简单格式选项来完成,尽管我在打印和格式方法(如 print.data.frame )的帮助页面中搜索并没有找到任何明显的解决方案(可用选项似乎更多用于格式化列值,而不是它们的名称)。

那么,print() 或 format() 是否有任何选项可以在列名上调用 abbreviate()?如果没有,有没有办法在将 abbreviate() 传递给 print() 之前将其应用于数据框的列名,而不改变传递的数据框?

我想得越多,我就越认为唯一的方法是将具有缩写列名的数据框的副本传递给 print() 。但这对我来说不是解决方案,因为我不想在交互式 session 期间更新原始副本时不断更新此副本。原始列名必须保持不变,因为我使用 which(colnames(dframe)=="name_of_column") 与数据交互。

我的最终目标是在使用 Server Auditor 等 ssh 应用程序时,在我的移动设备的小屏幕上更好地远程工作。如果列名称缩写为仅 2-3 个字符,我仍然可以识别它们,但可以在屏幕上容纳更多数据。也许甚至还有更适合压缩打印的 R 包?

最佳答案

您可以定义自己的打印方法

print.myDF <- function(x, abbr = TRUE, minlength = 2, ...) {
if (abbr) {
names(x) <- abbreviate(names(x), minlength = minlength)
}
print.data.frame(x, ...)
}

然后添加类 myDF到数据并打印
class(iris) <- c("myDF", class(iris))
head(iris, 3)
# S.L S.W P.L P.W Sp
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
print(head(iris, 3), abbr = FALSE)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
print(head(iris, 3), minlength = 5)
# Spl.L Spl.W Ptl.L Ptl.W Specs
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa

关于r - 在数据框打印期间缩写列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com