簡體   English   中英

R 基於列的分組和其他適用列的值構建動態列表

[英]R building a dynamic list based off grouping of a column and values of other applicable columns

我目前在 R 工作,並正在嘗試創建動態列表。 我有一個數據表,其中包含以下列的值 - study_site、anthro、modnum 和 list_val。 每個研究站點值都有 anthro、modnum 和 list_val 的不同組合。

我想采用以下代碼並使其生成動態列表,而不是將每個研究名稱和 anthro 值硬編碼到 if 語句中,因為每個 study_site 值都沒有每種類型的 anthro 值(特技、uwei 和浪費),但有些人這樣做。 此外,並非所有 study_site 值都具有所有 modnum 值 (1-5),但每個值都包含 5 個中的一些組合。

數據表中的list_val列對應於列表中每一項的第一部分,=號右側的第二部分可以從同一張表中的anthro和modnum值中拉取

(即其中 list_val==paste0("lmod_",anthro,modnum)

if(y=="one"){
  if(anthro=="stunt") 
  {l <- list(lstunt1 = lmod_stunt1, lstunt3 = lmod_stunt3, lstunt4 = lmod_stunt4, lstunt5 = lmod_stunt5)} 
  if(anthro=="uwei") 
  {l <- list(luwei1 = lmod_uwei1, luwei3 = lmod_uwei3, luwei4 = lmod_uwei4, luwei5 = lmod_uwei5)} 
  if(anthro=="waste") 
  {l <- list(lwaste1 = lmod_waste1, lwaste3 = lmod_waste3, lwaste4 = lmod_waste4, lwaste5 = lmod_waste5)} 
}

以下是數據表的一小部分,用於快速查看:

study_site   anthro   modnum  list_val
four         stunt    1       lstunt1
four         stunt    3       lstunt3
four         stunt    4       lstunt4
four         stunt    5       lstunt5
four         uwei     1       luwei1
four         uwei     3       luwei3
four         uwei     4       luwei4
four         uwei     5       luwei5
four         waste    1       lwaste1
four         waste    3       lwaste3
four         waste    4       lwaste4
four         waste    5       lwaste5

我知道我可能必須按 study_site 和 anthro 值進行分組,但我不完全確定如何執行此步驟或后續步驟。 是否可以動態構建這些列表?

這是原始表的一部分的 dput 值:

structure(list(study_site = c("one", "one", "one", "one", "one", 
"one", "one", "one", "one", "one", "one", "one", "one", "one", 
"one", "two", "two", "two", "two", "two", "two", "two", "two", 
"two", "two", "two", "two", "two", "two", "two", "three", "three", 
"three", "three", "three", "three", "three", "three", "three", 
"three", "four", "four", "four", "four", "four", "four", "four", 
"four", "four", "four", "four", "four"), anthro = c("stunt", 
"stunt", "stunt", "stunt", "stunt", "uwei", "uwei", "uwei", "uwei", 
"uwei", "waste", "waste", "waste", "waste", "waste", "stunt", 
"stunt", "stunt", "stunt", "stunt", "uwei", "uwei", "uwei", "uwei", 
"uwei", "waste", "waste", "waste", "waste", "waste", "stunt", 
"stunt", "stunt", "stunt", "uwei", "uwei", "uwei", "waste", "waste", 
"waste", "stunt", "stunt", "stunt", "stunt", "uwei", "uwei", 
"uwei", "uwei", "waste", "waste", "waste", "waste"), modnum = c(1, 
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 
3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 2, 3, 4, 2, 3, 4, 1, 3, 4, 
5, 1, 3, 4, 5, 1, 3, 4, 5), poisson_model = c(1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1), list_val = c("lstunt1", "lstunt2", "lstunt3", 
"lstunt4", "lstunt5", "luwei1", "luwei2", "luwei3", "luwei4", 
"luwei5", "lwaste1", "lwaste2", "lwaste3", "lwaste4", "lwaste5", 
"lstunt1", "lstunt2", "lstunt3", "lstunt4", "lstunt5", "luwei1", 
"luwei2", "luwei3", "luwei4", "luwei5", "lwaste1", "lwaste2", 
"lwaste3", "lwaste4", "lwaste5", "lstunt1", "lstunt2", "lstunt3", 
"lstunt4", "luwei2", "luwei3", "luwei4", "lwaste2", "lwaste3", 
"lwaste4", "lstunt1", "lstunt3", "lstunt4", "lstunt5", "luwei1", 
"luwei3", "luwei4", "luwei5", "lwaste1", "lwaste3", "lwaste4", 
"lwaste5")), row.names = c(NA, -52L), class = c("data.table", 
"data.frame"))

您在尋找expand.grid嗎?

d <- transform(expand.grid(study_site=c("one", "two", "three", "four"),
                           anthro=c("stunt", "uwei", "waste"),
                           modnum=1:5,
                           poisson_model=1),
               list_val=Reduce(paste0, cbind("l", d[c("anthro", "modnum")])))
d <- d[order(d$study_site, d$anthro, d$modnum), ]
head(d)
#    study_site anthro modnum poisson_model list_val
# 1         one  stunt      1             1  lstunt1
# 13        one  stunt      2             1  lstunt2
# 25        one  stunt      3             1  lstunt3
# 37        one  stunt      4             1  lstunt4
# 49        one  stunt      5             1  lstunt5
# 5         one   uwei      1             1   luwei1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM