如何将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()函数的函数,这似乎是一个糟糕的解决方法。
答案 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)