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

时间:2018-07-03 20:17:41

标签: r dplyr time-series

我有一个针对超过50,000个不同个体的不同时间状态的数据框。状态是整数,小数,NULL和字符的混合。我想将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 个答案:

答案 0 :(得分:1)

当您尝试将非数字值强制转换为数字时,它们会变成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