将字符列格式化为小于和大于符号的数字

时间:2019-06-28 09:35:01

标签: r r-markdown

我有一组数据,其中实验室提交了微生物对数减少的计算。有时只能声明一个大于或小于某个数字的值。此处的示例数据:

test.df <- tribble(
~x, ~y, ~z,
#--|--|----
"pa", "lab1", "-3.52",
"pa", "lab2", ">5.0",
"pa", "lab3", "<-1.567")

是否有任何例程可以使我以正确的对齐方式对其进行格式化,即

Organism     Laboratory     LogReduction
--------     ----------     ------------
pa           lab1            -3.52
pa           lab2           > 5.0
pa           lab3           <-1.567

即小数点对齐,所有大于或小于的符号也对齐吗?

基本上,我试图得到一个这样的数据框,我可以用康宝来打印

test.df <- tribble(
~x, ~y, ~z,
#--|--|----
"pa", "lab1", " -3.52 ",
"pa", "lab2", "> 5.0  ",
"pa", "lab3", "<-1.567")

我尝试了一些sprintf修改,但看不到任何符合要求的东西。

1 个答案:

答案 0 :(得分:0)

我还没有看到执行此操作的功能,但是您应该可以编写一个功能。例如:

prefix <- gsub("[^><]*", "", test.df$z)
prefix[nchar(prefix) < 1] <- " "
suffix <- gsub("[<>]", "", test.df$z)
suffix <- format(as.numeric(suffix))
test.df$z <- paste0(prefix, suffix)

此时,test.df$z具有所需的格式,但是当您将其放入Markdown表中时,前导空格将被删除,并且所有内容将无法对齐。要解决此问题,您可以尝试用数字空格字符替换空格字符。您还需要用减号(而不是连字符)替换“-”。

这对我来说适用于HTML:

test.df$z <- gsub(" ", "&numsp;", test.df$z)
test.df$z <- gsub("-", "&minus;", test.df$z)
kable(test.df)

它产生此表:

screenshot

如果您使用的是HTML以外的其他输出格式,则空格和连字符替换必须不同。