gpt4 book ai didi

r - 基于分布的数据框样本

转载 作者:行者123 更新时间:2023-12-02 02:42:37 25 4
gpt4 key购买 nike

我正在尝试从数据框中采样,但条件是样本代表某个标准的分布(在我的例子中。数据框的结构如下:

df <- data.frame(Locaton = c(A, B, B, B, C, C, ...),
Veg_Species = c(X, Y, Z, Z, Z, Z...),
Date_Diff = c(2, 5, 2, 0, 4, 4...))

重要的是要知道,Veg_Species 的数量不同。这意味着 X 出现了 25 次,例如 Y 45 次和 Z 78 次。现在我想根据最小样本的 Date_Diff 分布从不同的 Veg_Species 中采样。在那种情况下,这意味着根据 XDate_diff 分布从每个物种中抽样。

我认为我可以用 dplyr 做到这一点:

sample.species <- df %>% filter(Veg_Species == 'Z') %>% sample_n(25, replace = TRUE)

但这显然只是从名称为 Z 的所有 Veg_Species 中随机抽样。

我怎样才能同时考虑分布?

有关更详细的示例,请单击 here .

最佳答案

也许您可以尝试对 Date_Diff 的分布进行核密度估计。

<强>1。数据和封装

df <- read.csv("http://www.sharecsv.com/dl/2a26bf2c69bfd76e8ddcecd1c3739a31/ex.csv", row.names = 1)
library(dplyr)

<强>2。找到最小的物种

df %>% count(Species)

# Species n
# 1 Adenostoma fasciculatum 95
# 2 Artemisia filifolia 26
# 3 Eriogonum fasciculatum 41
# 4 Tamarix L. 27

<强>3。分布和线性插值的核密度估计

(引用:https://stats.stackexchange.com/a/78775/218516)

val <- df$Date_Diff[df$Species == "Artemisia filifolia"]
dist.fun <- approxfun(density(val))

<强>4。抽样

(自 dplyr 1.0.0 以来,sample_n() 已被 slice_sample() 取代。 )

df2 <- df %>%
group_by(Species) %>%
slice_sample(n = 26, weight_by = dist.fun(Date_Diff)) %>%
ungroup()

<强>5。检查

df2 %>% count(Species)

# Species n
# <chr> <int>
# 1 Adenostoma fasciculatum 26
# 2 Artemisia filifolia 26
# 3 Eriogonum fasciculatum 26
# 4 Tamarix L. 26

关于r - 基于分布的数据框样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63326846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com