【问题标题】:Strip leading zero from numeric vector without changing class从数值向量中去除前导零而不改变类
【发布时间】:2014-07-09 04:45:17
【问题描述】:

我有以下数据,这是一些美国职业棒球大联盟的统计数据。

  Year   AVG   SLG  TB   OBP IsoPow    RC
1 1986 0.223 0.300 172 0.330  0.194  64.1
2 1987 0.261 0.356 271 0.329  0.230  92.8
3 1988 0.283 0.357 264 0.368  0.208 100.0
4 1989 0.248 0.328 247 0.351  0.178  91.9
5 1990 0.301 0.374 293 0.406  0.264 128.0
6 1991 0.292 0.367 262 0.410  0.222 118.2

通常,百分比类型的 MLB 统计数据显示为小数,但会删除前导零。我也想做同样的事情,但也要保留变量的class,在本例中为numeric

例如,对于bonds$AVG,我希望结果是一个看起来完全一样的数字向量

[1] .223 .261 .283 .248 .301 .292

使用sub,向量从数字变为字符,然后在用as.numeric 包装后返回其原始数字状态。

> sub(0, "", bonds$AVG)
# [1] ".223" ".261" ".283" ".248" ".301" ".292"
> as.numeric(sub(0, "", bonds$AVG))
# [1] 0.223 0.261 0.283 0.248 0.301 0.292

这在 R 中可能吗?

bonds <-
structure(list(Year = c(1986, 1987, 1988, 1989, 1990, 1991), 
    AVG = c(0.223, 0.261, 0.283, 0.248, 0.301, 0.292), SLG = c(0.3, 
    0.356, 0.357, 0.328, 0.374, 0.367), TB = c(172, 271, 264, 
    247, 293, 262), OBP = c(0.33, 0.329, 0.368, 0.351, 0.406, 
    0.41), IsoPow = c(0.194, 0.23, 0.208, 0.178, 0.264, 0.222
    ), RC = c(64.1, 92.8, 100, 91.9, 128, 118.2)), .Names = c("Year", 
"AVG", "SLG", "TB", "OBP", "IsoPow", "RC"), row.names = c(NA, 
6L), class = "data.frame")

【问题讨论】:

  • 我会四处走动,说这是不可能的。您可以为您的十进制值定义一个特定的 print 方法,从而使 0 关闭,但我认为没有它就无法存储值。
  • 这就是我害怕的。我希望有一些魔法。 :)
  • 也许是这样的,虽然数据位于数据框中,但看起来像我想要的那样,但是当你取出值时,它们又变成了零。

标签: r


【解决方案1】:

也许您可以通过修改print.data.frame来概括以下内容?

f1 <- function(x) noquote(sub(0, "", x))
f1(bonds$AVG)
.223 .261 .283 .248 .301 .292

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2012-07-19
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多