R 特定单元格中的控制数字

R 特定单元格中的控制数字,r,digits,R,Digits,我有一张这样的桌子: +-----------------------------------+-------+--------+------+ | | Male | Female | n | +-----------------------------------+-------+--------+------+ | way more than my fair share | 2,4 | 21,6

我有一张这样的桌子:

+-----------------------------------+-------+--------+------+
|                                   | Male  | Female |  n   |
+-----------------------------------+-------+--------+------+
| way more than my fair share       | 2,4   | 21,6   |  135 |
| a little more than my fair share  | 5,4   | 38,1   |  244 |
| about my fair share               | 54,0  | 35,3   |  491 |
| a littles less than my fair share | 25,1  | 3,0    |  153 |
| way less than my fair share       | 8,7   | 0,7    |   51 |
| Can't say                         | 4,4   | 1,2    |   31 |
| n                                 | 541,0 | 564,0  | 1105 |
+-----------------------------------+-------+--------+------+
一切都很好,但我想做的是在最后一行中根本不显示任何数字,因为它们显示的是边距(真实情况)。在R I中是否有可能操纵特定的细胞及其数字


谢谢

您可以使用
ifelse
在不同的行中以不同的格式输出数字,如下例所示。但是,要使最后一行中的值按位置值与前几行对齐,还需要一些额外的欺骗:

library(knitr)
library(tidyverse)

# Fake data
set.seed(10)
dat = data.frame(category=c(LETTERS[1:6],"n"), replicate(3, rnorm(7, 100,20)))

dat %>% 
  mutate_if(is.numeric, funs(sprintf(ifelse(category=="n", "%1.0f", "%1.1f"), .))) %>% 
  kable(align="lrrr")
使用
huxtable
软件包可以轻松地对值进行十进制对齐(有关表格格式的更多信息,请参阅):

以下是从
r标记
文档编织为PDF时的PDF输出:


我想您可以用空字符串替换值?这是什么数据结构?我不知道你说的空字符串是什么意思。这是一个数据帧,然后我在一个降价文件中使用它,我用kable设计它。一点代码高尔夫<代码>sprintf(ifelse(类别==“n”,“1.0f”,“1.1f”),)谢谢。这很有效。但我并不真正理解代码。我得去看看。不幸的是,我还需要第三列没有数字。任何额外的帮助都将不胜感激。
sprintf
是一个格式化功能(有关详细信息,请参阅
?sprintf
)<代码>%1.0f“表示没有小数点的格式,
%1.1f”
表示有一个小数点的格式。您可以将
“%1.0f”
格式应用于整个第三列,然后分别格式化其他两个数字列。更一般地说,关键思想是将数字转换为文本字符串以输出到表中,并使用条件语句或其他行和列选择方法以您希望的方式格式化每个单元格。谢谢。但是为什么df$n没有呢,因为我想它现在是一个角色了!?
|category |    X1|    X2|    X3|
|:--------|-----:|-----:|-----:|
|A        | 100.4|  92.7| 114.8|
|B        |  96.3|  67.5| 101.8|
|C        |  72.6|  94.9|  80.9|
|D        |  88.0| 122.0|  96.1|
|E        | 105.9| 115.1| 118.5|
|F        | 107.8|  95.2| 109.7|
|n        |    76|   120|    88|
library(huxtable)

tab = dat %>% 
  mutate_if(is.numeric, funs(sprintf(ifelse(category=="n", "%1.0f", "%1.1f"), .))) %>% 
  hux %>% add_colnames()

align(tab)[-1] = "."

tab