R 中的 DataTable,将具有特定值类别的行格式化为百分比

2024-04-29

如果我有一个数据表,并且我的目标是将包含 MONTH="Percent Change:" 的任何行更改为百分比:

             MONTH YEAR                    Client      Revenue  Metric 1          Metric 2         Metric 3
1:          MTD: 1 2015                  Client A 255999.33000 5.251913e+07     3.476303e+07   0.66191181
2:          MTD: 1 2016                  Client A 393450.17000 6.676211e+07     3.557979e+07   0.53293384
3: Percent Change: 2016                  Client A     53.69187 2.711961e+01     2.349502e+00 -19.48567206
4:          MTD: 1 2016                  Client B 178793.62000 1.339837e+09     2.527131e+07   0.01886148
5: Percent Change: 2016                  Client B           NA           NA               NA           NA
6:          MTD: 1 2015                  Client C  98492.19000 1.535520e+08     2.213594e+07   0.14415924
    Metric 4
1:  7.364126
2: 11.058249
3: 50.163774
4:  7.074964
5:        NA
6:  4.449424

datatable(df) %>%
  formatPercentage(df[which(df$MONTH== "Percent Change:"),],2)

如何仅将数据表中的百分比更改行格式化为百分比?

预期输出:

             MONTH YEAR                    Client      Revenue  Metric 1          Metric 2         Metric 3
1:          MTD: 1 2015                  Client A 255999.33000 5.251913e+07     3.476303e+07   0.66191181
2:          MTD: 1 2016                  Client A 393450.17000 6.676211e+07     3.557979e+07   0.53293384
3: Percent Change: 2016                  Client A     53.69187% 2.711961e+01%     2.349502e+00% -19.48567206%
4:          MTD: 1 2016                  Client B 178793.62000 1.339837e+09     2.527131e+07   0.01886148
5: Percent Change: 2016                  Client B           NA           NA               NA           NA
6:          MTD: 1 2015                  Client C  98492.19000 1.535520e+08     2.213594e+07   0.14415924
    Metric 4
1:  7.364126
2: 11.058249
3: 50.163774%
4:  7.074964
5:        NA
6:  4.449424

dput: 

function (x, file = "", control = c("keepNA", "keepInteger", 
    "showAttributes")) 
{
    if (is.character(file)) 
        if (nzchar(file)) {
            file <- file(file, "wt")
            on.exit(close(file))
        }
        else file <- stdout()
    opts <- .deparseOpts(control)
    if (isS4(x)) {
        clx <- class(x)
        cat("new(\"", clx, "\"\n", file = file, sep = "")
        for (n in methods::.slotNames(clx)) {
            cat("    ,", n, "= ", file = file)
            dput(methods::slot(x, n), file = file, control = control)
        }
        cat(")\n", file = file)
        invisible()
    }
    else .Internal(dput(x, file, opts))
}
<bytecode: 0x000000003031c860>
<environment: namespace:base>

当我尝试运行数据表时出现的错误是这样的:

Error in names[name] : invalid subscript type 'list'

我们可以将第 4 列到第 8 列转换为character班级。然后,使用逻辑条件i,我们循环第 4 到 8 列,paste the %并分配(:=)它回到列。

library(data.table)
setDT(df)[, (4:8) := lapply(.SD, as.character), .SDcols= 4:8]
df[MONTH=="Percent Change:", (4:8) := 
    lapply(.SD, function(x) paste0(x[!is.na(x)],"%")), .SDcols=4:8]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中的 DataTable,将具有特定值类别的行格式化为百分比 的相关文章

随机推荐