代码之家  ›  专栏  ›  技术社区  ›  AK88

使用混合值(字符串、日期、数字等)舍入数据帧中的数字

  •  1
  • AK88  · 技术社区  · 8 年前

    options(digits = 6) ,提供的解决方案 this

    structure(list(X__1 = c("Start", "End", "EFM", "UTH", "PEU", 
    "HPX"), `TecM` = c("Mar-00", "Mar-01", "NA", "NA", 
    "-9.6432560109885879E-2", "-0.26834090581750103"), `TerA` = c("Sep-01", 
    "Sep-01", "NA", "NA", "0", "-0.11600490599886504"), `GloC` = c("Nov-07", 
    "Mar-09", "-0.62921737727223548", "NA", "-0.54549924666990268", 
    "-0.54518556256613238"), `ECis` = c("Jul-11", 
    "Sep-11", "-0.2912541254125412", "NA", "-0.21781440969547586", 
    "-0.18769305803934319"), `OSe` = c("Jul-14", "Dec-14", 
    "-0.10996326905417812", "-3.4236420002695674E-2", "-2.8281230134625412E-2", 
    "4.8566639665387892E-2")), .Names = c("X__1", "TecM", 
    "TerA", "GloC", "ECis", 
    "Oil Selloff"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -6L))
    

    有什么简单的选择吗?

    2 回复  |  直到 8 年前
        1
  •  3
  •   drmariod    8 年前

    我想还有一个 tibble 解决方案,但我总是对在中选择列等感到困惑 tibbles . 这就是为什么我把它改成了 data.frame .

    jnk1 <- as.data.frame(jnk)
    numeric_values <- !is.na(apply(jnk1, 2, as.numeric))
    jnk1[numeric_values] <- round(as.numeric(jnk1[numeric_values]),1)
    

    ink . 检查哪些值可以解析为数字,然后用舍入值覆盖它们。

    因为可能会有警告,所以可以使用此行抑制它们

    numeric_values <- suppressWarnings(!is.na(apply(jnk1, 2, as.numeric)))
    
        2
  •  1
  •   Z.Lin    8 年前

    如果只是为了方便 ,下一行将表中所有看起来像数字的值舍入为2位:

    # assume df is your original data frame
    suppressWarnings(data.frame(lapply(df, function(y) ifelse(is.na(as.numeric(y)), y, round(as.numeric(y), 2)))))
    
    # result
       X__1   TecM   TerA   GloC   ECis Oil.Selloff
    1 Start Mar-00 Sep-01 Nov-07 Jul-11      Jul-14
    2   End Mar-01 Sep-01 Mar-09 Sep-11      Dec-14
    3   EFM     NA     NA  -0.63  -0.29       -0.11
    4   UTH     NA     NA     NA     NA       -0.03
    5   PEU   -0.1      0  -0.55  -0.22       -0.03
    6   HPX  -0.27  -0.12  -0.55  -0.19        0.05
    

    但在数据框中包含数字/字符串/日期的列仍然是一列字符。