首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据集组中分配Weibull密度

在数据集组中分配Weibull密度
EN

Stack Overflow用户
提问于 2013-12-10 20:11:22
回答 2查看 86关注 0票数 0

我试图在我的data.frame (df)上创建一个新列,其值为Weibull密度。

我需要为分位数向量(w)分配密度,同时考虑到这个df中的组。

这些子集由变量“绘图”分隔。

每个地块都有特定的Weibull参数,密度来源于此。

参数存储在df_2中。

可复制的例子:

代码语言:javascript
复制
set.seed(25)

w = rweibull(1200,10,28)
plot = data.frame(c(rep.int(1,300),rep.int(2,300),rep.int(3,300),rep.int(4,300)))
   names(plot)[1] = c("plot")

df = cbind(plot,w)

df_2=data.frame(cbind(c(1,2,3,4),c(28,27,26,25),c(9,9.5,8,7)))
   names(df_2)[1:3] = c("plot","scale","shape")

我试图从哈德利的答案here中改编一段代码,但没有成功。

代码语言:javascript
复制
library(plyr)
weibull_density <- ddply(df, "plot", function(x) {
  data.frame(
    density = dweibull(df$w, scale=df_2$scale, shape=df_2$shape)
  )
})

nrow(weibull_density)
[1] 4800

它返回一个包含4800行的data.frame (我期望1200行)。

我还查看了?ddply帮助页面中提供的示例,但无法找到如何使其适应这种情况。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-10 20:49:22

您可以获得4个值,因为df_2有4行。您需要告诉R使用df_2的第一行来表示plot == 1w值。

以下代码将产生预期的输出:

代码语言:javascript
复制
weibull_density <- transform(df, 
  density = as.vector(sapply(unique(plot), function(x) 
    dweibull(w[plot %in% x], scale = df_2$scale[x], shape = df_2$shape[x]))))
票数 1
EN

Stack Overflow用户

发布于 2013-12-10 20:42:33

我想这也许是最简单的??

代码语言:javascript
复制
> df3=merge(df, df_2)
> res=mapply(dweibull, x=df3$w, shape=df3$shape, scale=df3$scale)

> head(res)
[1] 0.11900795 0.09575625 0.09021534 0.04742028 0.08339647 0.01091331

> length(res)
[1] 1200

也许?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20504243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档