[英]How to standardize values in a column based on grouping by two other columns in 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.