R中的用户定义函数不起作用

时间:2018-11-25 09:11:49

标签: r

我正在尝试在R中的代码下运行,但无法正常工作。需要你的帮助。让我解释一下我的要求。
我有一个名为Data的数据框。这样,我就有了名为view的列。让我们考虑view包含6个值1,2,3,5,20,NA。 现在,我想在视图上计算99%。在此数据上使用分位数功能将给我分位数值19(四舍五入)。 现在我正在检查条件,如果视图列的任何值都大于19,则将其替换为19。在我们的示例中,我们有一个大于19的值,即20,因此应将20替换为19。

现在,如果我像下面这样手动运行所有代码,则效果很好

Data <- data.frame(view=c(1,2,3,5,20,NA))

summary(Data)
n = quantile(Data$view, 0.99, na.rm = TRUE)

Data$view[Data$view > n] <- n

但是我想创建一个仅可以从数据帧中调用变量并完成上述工作的函数。以下是我尝试但无法使用的功能。

ReplaceQuantile <- function(x) {
  n = quantile(na.omit(x),0.99)
  x[x > n] <- n
}

ReplaceQuantile (Data$view)

希望我的要求很明确。

1 个答案:

答案 0 :(得分:2)

您的代码即将运行。我建议在分位数函数中使用na.rm = TRUE而不是na.omit

ReplaceQuantile <- function(x) {
  n = quantile(x, 0.99, na.rm = TRUE)
  x[x > n] <- n
  x
}

ReplaceQuantile (Data$view)

通过这种方式删除NA,函数应运行。

编辑:考虑这个可重复的示例:

Data <- data.frame(view = c(seq(1, 5, by = .1), NA))

ReplaceQuantile <- function(x) {
   n = quantile(x, 0.99, na.rm = TRUE)
   x[x > n] <- n
   x
}

ReplaceQuantile(Data$view)

编辑II进行澄清:您需要将结果分配给Data$view才能覆盖原始值:

Data <- data.frame(view=c(1,2,3,5,20,NA))

ReplaceQuantile <- function(x) {
   n = quantile(x, 0.99, na.rm = TRUE)
   x[x > n] <- n
   x
  }

 Data$view <- ReplaceQuantile(Data$view)

这样,您应该获得以下结果:

 Data$view
 [1]  1.0  2.0  3.0  5.0 19.4   NA
相关问题