R 非常新,可以使用一些指導、幫助或解決方案!
我的實際資料集很大,所以我有一個包含兩列的示例資料集,如下所示:
plot<- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
ID<- c("S","S","S","C","T","S","SP","T", "C", "T","S","SP","T","S","C")
dat<- data.frame(plot,ID)
我試圖隨機洗掉每個地塊的一個條目,計算每個 ID 的頻率,隨機洗掉每個地塊的另一個條目,計算頻率并繼續重復。
到目前為止,在一些幫助下,我能夠使用以下內容從每個圖中隨機洗掉一個條目
dat %>%
group_by(plot) %>%
sample_n(n() - 1) %>%
ungroup()
我可以用它來計算每個 ID 的頻率
dat %>%
group_by(ID) %>%
summarise(n = n()) %>%
mutate(freq = n / sum(n))
我需要能夠沖洗并重復這兩個功能,并每次查看結果。這個資料集只有 15 個變數,但我的實際資料集要大得多,所以不斷地寫出超過 100 次似乎效率低下。
是否可以同時回圈或重新運行這兩個函式并每次產生 x 次輸出?例如,對于我提供的樣本資料,總共可能是 4 次。我嘗試了“for”回圈,但我無法讓它作業(很可能是我的用戶錯誤)
謝謝你的幫助!
uj5u.com熱心網友回復:
將兩個操作合并在一個函式中,并使用map
不同的p
值呼叫它。
library(dplyr)
run_sample <- function(dat, p) {
dat %>%
group_by(plot) %>%
sample_n(n() - p) %>%
ungroup() %>%
count(ID) %>%
mutate(freq = n / sum(n))
}
set.seed(123)
purrr::map(seq(n_distinct(dat$ID)), run_sample, dat = dat)
這將回傳一個小標題串列。
result
#[[1]]
# A tibble: 4 x 3
# ID n freq
# <chr> <int> <dbl>
#1 C 2 0.167
#2 S 5 0.417
#3 SP 2 0.167
#4 T 3 0.25
#[[2]]
# A tibble: 3 x 3
# ID n freq
# <chr> <int> <dbl>
#1 C 1 0.111
#2 S 6 0.667
#3 T 2 0.222
#[[3]]
# A tibble: 3 x 3
# ID n freq
# <chr> <int> <dbl>
#1 S 2 0.333
#2 SP 2 0.333
#3 T 2 0.333
#[[4]]
# A tibble: 2 x 3
# ID n freq
# <chr> <int> <dbl>
#1 C 1 0.333
#2 S 2 0.667
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315430.html
上一篇:根據路段查找道路起點和終點的順序