将函数应用于列的每个元素,并将结果添加到新列

时间:2015-04-21 19:51:34

标签: r

如何将ppois()函数应用于列的每个元素,并将得到的p值输出到同一数据框中的新列中?

例如,如果我有一个名称和年龄的数据框:

name  age
James  12
Allie  22

我希望得到的数据框为:

name  age  pvalue
James  12  0.0056
Allie  22  0.0023

我尝试过:

mydata$pvalue <- ppois(mydata$age, lambda=lambda.age, lower=FALSE)

但这只是为每一行提供相同的p值。我的实际数据是600万行,所以我正在寻找最快,最有效的选择。我可以像其他问题一样使用apply,但这需要编写一个只包含ppois()函数的函数,这似乎是一个糟糕的解决方法。

2 个答案:

答案 0 :(得分:0)

您的代码应该有效 - 我不知道它为什么没有,但使用dplyr包也很容易。

data = data.frame(name=c("James","Allie","Tom","Susan"),age=c(12,22,15,9))
lambda.age = 3
data %>%
  mutate(pvalue=ppois(age,lambda=lambda.age,lower=F)
#>    name age       pvalue
   1 James  12 1.614905e-05
   2 Allie  22 2.070411e-13
   3   Tom  15 1.240802e-07
   4 Susan   9 1.102488e-03

答案 1 :(得分:0)

我认为你只需要定义分位数矢量q。

示例:

mydata $ pvalue&lt; - ppois(q = mydata $ age,lambda = lambda.age,lower = FALSE)