当前位置: 首页 > 知识库问答 >
问题:

格式化数据。表列值(行),如果是数字

丁星火
2023-03-14

我正在创建摘要数据。表将使用xtable,插入knitr报表中。如果<code>是,我想检查每个列中的每个行值。numeric()==TRUE如果是,则格式化数字,然后将其还原为字符。如果<code>为。numeric()==FALSE然后返回值。实际的<code>数据。表可能有许多列。

以下是我在下面的内容,所需的输出位于底部:

library(data.table)
library(magrittr)

dt <- data.table(A = c("apples",
                       "bananas",
                       1000000.999),
                 B = c("red",
                       5000000.999,
                       0.99))

dt

a <- dt[, lapply(.SD,
                 function(x)  {
                   if (is.na(is.numeric(x))) {
                     prettyNum(as.numeric(x), digits = 0, big.mark = ",")
                   } else {
                     x
                   }
                 })]

a

b <- dt[, A := ifelse(is.na(is.numeric(A)),
                      format(as.numeric(A), digits = 0, big.mark = ","),
                      A)] %>% 
  .[, B := ifelse(is.na(is.numeric(B)),
                  format(as.numeric(B), digits = 0, big.mark = ","),
                  B)]

b
b


desired <- data.table(A = c("apples",
                            "bananas",
                            "1,000,000"),
                      B = c("red",
                            "5,000,000",
                            "1"))

desired

根据我的理解,< code>data.table语法的< code>j参数中的< code > la ply 对vector进行操作,因此它可用于< code>mean() 、< code>sum() 、< code>na.approx()等函数。不一定能在这里工作。但是我想遍历< code>data.table中的每一列,而不指定每一列的名称,因为可能有许多列,命名它们会很麻烦。这有点像我知道圆不在正方形里,但我真的希望它在正方形里!

我尝试了我认为应该有效的:= ifelse()方法,但它似乎返回了第一个元素。在列完全是数字的不同 data.table 上,采用相同的方法可生成所有 NA

感谢任何帮助!

共有1个答案

高云瀚
2023-03-14

我们可以使用带有numberset。用for循环遍历列序列,识别所有数字或的元素的索引。('i1'),将其用作set中的i,将这些元素转换为数字,应用number为该元素设置格式

library(scales)
library(data.table)
for(j in seq_along(dt)) {
  i1 <- grep("^[0-9.]+$", dt[[j]])
  set(dt, i = i1, j = j, value = number(as.numeric(dt[[j]][i1]), big.mark = ","))
 }
dt
#          A         B
#1:    apples       red
#2:   bananas 5,000,001
#3: 1,000,001         1
 类似资料:
  • pre { white-space: pre-wrap; } 以下实例格式化在 easyui DataGrid 里的列数据,并使用自定义列的 formatter,如果价格小于 20 就将文本变为红色。 为了格式化一个数据网格(DataGrid)列,我们需要设置 formatter 属性,它是一个函数。这个格式化函数包含三个参数: value:当前列对应字段值。 row:当前的行记录数据。 inde

  • v-charts 提供对数据格式的设置的能力,一个常见的设置数据格式的方式如下所示: <template> <ve-line :data="chartData" :settings="chartSettings"></ve-line> </template> <script> export default { data () { this.chartSettings = { metr

  • 本实例演示了如何使用NumberFormat对象格式化数值、货币和百分数,以及将格式化数值后的字符串追加到其他的字符串后面,并使用FieldPosition对象跟踪追加的位置,最后演示了DecimalFormat对象如何通过模式字符串来格式化数值。 例子 : 格式化数值 1. 编写FormatNumber程序 FormatNumber类演示了各种格式化数值操作,该类的代码如下: package c

  • 本文向大家介绍Flex中对表格中某列的值进行数字格式化保留两位小数,包括了Flex中对表格中某列的值进行数字格式化保留两位小数的使用技巧和注意事项,需要的朋友参考一下 1、问题背景 一般的,表格中展示的比率,对比率的处理是:保留两位小数,并向上保留 2、实现实例 3、实现结果

  • 数据格式化 这个ValueFormatter接口可以用来创建定制格式化程序类允许格式化图标中的数据或这Y轴上的数据。 使用ValueFormatter仅需要创建一个新的类和实现他的接口并且从getFormattedValue(float value)返回任何你想要显示的文本。 自定义格式化的例子: public class MyValueFormatter implements V

  • 我有一个Python pandas DataFrame: 我想把一些股票的所有行放在一起,比如。这意味着我想要这样的语法: 既然熊猫不接受上述命令,如何达到目标?