【问题标题】:Right-align string character column in R console output在 R 控制台输出中右对齐字符串字符列
【发布时间】:2019-05-11 13:11:51
【问题描述】:

我将文本 sn-ps 拆分为三列。我想在 R 控制台的KWIC concordance format 中显示这三列,以便快速“视觉分析”。为此,第一列需要右对齐,中间一列居中,第三列左对齐。

这里有一些示例数据来演示这个问题:

concordance1 <- c("Well it's not that easy as you can tell I was trying to work out how this", "is working", "but I can't say I understand yet")
concordance2 <- c("they've just", "been having", "more and more trouble")
concordance3 <- c(" sorry I wasn't really engaging Um I", "was thinking", "back to like youth club days...")
data <- as.data.frame(rbind(concordance1, concordance2, concordance3))

如果我只是打印数据,所有三列都是左对齐的,R 会在几行上显示索引行,所以它完全难以辨认。

data

到目前为止,tibble 显示是我能找到的最好的。它将表格的宽度调整为我的控制台显示(见屏幕截图),这是一个改进。这是一个开始,但为了快速分析这些索引,我需要能够在 tibble 显示中右对齐第一列

Tibble display screenshot

我很感激任何关于如何实现这一目标的提示。谢谢!

【问题讨论】:

    标签: r corpus


    【解决方案1】:

    你可以试试这个:

    print(mapply(format, data, justify=c("right", "centre", "left")), quote=F)
    
    

    编辑:

    要将第一列左截断到指定的最大宽度,您可以将其包装在一个函数中,如下所示:

    format.kwic <- function(data, width=20) {
        trunc <- function(x, n=20) {
            x <- as.character(x)
            w <- nchar(x)
            ifelse(w > n, paste0("\U2026", substring(x, w-n, w)), x)
        }
        data[,1] <- trunc(data[,1], n=width)
        mapply(format, data, justify=c("right", "centre", "left"))
    }
    print(format.kwic(data), quote=F)
    

    输出:

    ##      V1                     V2           V3                              
    ## [1,] … to work out how this  is working  but I can't say I understand yet
    ## [2,]           they've just been having  more and more trouble           
    ## [3,] … really engaging Um I was thinking back to like youth club days...
    

    【讨论】:

    • 感谢您的建议。不幸的是,与标准的 df 控制台显示一样,它不会截断第一列中长字符串的开头。这意味着一行可能会显示在控制台中的两行或多行上。这使得动态解释索引行变得非常困难。我正在寻找这种解决方案,但适用于 tibble。
    • 改变宽度有帮助吗(例如 options("width"=200))
    • 我刚刚尝试了 options("width"),但是由于它也不会截断过长的行,所以很遗憾我找不到适用于所有索引行的宽度(它们是各种长度,有些很长)。
    • 已经有多种方法用于截断长字符串以便在控制台中进行可视化,例如:stackoverflow.com/questions/8343682/…stackoverflow.com/questions/8379988/…
    • 我更新了我的答案以解决您的评论。如果你愿意,你可以把它变成一个 tibble,但这不是必需的。
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多