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

对数据帧应用上限,同时忽略非数值

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

    我有一个不同状态的数据框架,随着时间的推移,>50000个不同的个人。状态是整数、小数、零和字符的混合。我想申请 ceiling() 函数设置为数据帧,但只更改数值,而保持其他值不变。

    structure(list(`11/1/2014` = c("0", "NULL", "NULL", "NULL", "NULL", 
        "NULL"), `12/1/2014` = c("0", "0", "0", "0", "0", "0"), `1/1/2015` = c("0", 
        "0", "0", "0", "S", "0"), `2/1/2015` = c("0", "0", "1.72", "0", 
        "S", "0")), row.names = c(NA, 6L), class = "data.frame")
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Scarabee    8 年前

    非数值变成 NA 当您试图将它们强制为数值时。所以你可以使用这样的函数:

    ceil <- function(x) {
      x_num <- suppressWarnings(as.numeric(x))
      ifelse(!is.na(x_num),
             as.character(ceiling(x_num)),
             as.character(x))
    }
    
    transmute_all(yourdataframe, ceil)
    #   11/1/2014 12/1/2014 1/1/2015 2/1/2015
    # 1         0         0        0        0
    # 2      NULL         0        0        0
    # 3      NULL         0        0        2
    # 4      NULL         0        0        0
    # 5      NULL         0        S        S
    # 6      NULL         0        0        0