[英]How to look through column names in R and perform operations then store it in a list of unknown row size
我是一名新的R程序員,正在嘗試創建一個通過大量列的循環,以按特定度量衡數據。
我有大量的變量數據集(某些因素,一些數字)。 我想遍歷各列,確定哪一個是一個因素,然后如果它是一個因素,我想使用一些Tapply函數進行一些加權並返回均值。 我建立了一個可以一次在這里執行此操作的函數:
weight.by.mean <- function(metric,by,x,funct=sum()){
if(is.factor(x)){
a <- tapply(metric, x, funct)
b <- tapply(by, x, funct)
return (a/b)
}
}
I am passing in the metric that I want to weigh and the by argument is what
I am weighting the metric BY. x is simply a factor variable that I would
like to group by.
例如:我有5種甜甜圈類型(我的論點x)和我想看到平均面團(我的觀點公制 )使用圓環形,但我需要權衡由用於該金額面團( 通過參數)使用的面團甜甜圈類型。
換句話說,我試圖通過不給其他甜甜圈類型分配比其他甜甜圈類型更多的權重來避免歪斜(也許我對釉面甜甜圈使用了很多普通面團,但對奶油甜甜圈不使用太多特殊面團。我希望這有意義) !
這是我正在研究的功能,可以遍歷具有許多可能的不同因素變量的大型數據集,例如我先前的示例中的“甜甜圈類型”。 它尚不起作用,因為我不確定還需要添加什么。 感謝您為我提供的任何幫助。 我使用R不到一個月,因此請記住這一點。
我的最終目標是輸出具有所有這些不同方式的矩陣或數據幀,但是每個因子可能具有5至50個不同的級別,因此行大小取決於每個因子的級別數。
weight.matrix <- function(df,metric,by,funct=sum()){
n <- ncol(df) ##Number of columns to iterate through
ColNames <- as.matrix(names(df))
OutputMatrix <- matrix(1, ,3,nrow=, ncol=3)
for(i in 1:n){
if(is.factor(paste("df$",ColNames[i], sep=""))){
a[[i]] <- tapply(metric, df[,i], funct)
b[[i]] <- tapply(by, df[,i], funct)
}
OutputMatrix <- (a[[i]]/b[[i]])
}
}
如果您的每個因素都有不同的級別,那么使用長數據幀而不是寬數據幀會更有意義。 例如:
Metric Value Mean
DonutType Glazed 3.0
DonutType Chocolate 5.2
DonutSize Small 1.2
DonutSize Medium 2.3
DonutSize Large 3.6
數據幀不適合不同長度的向量。 如果要將數據存儲在數據框中,則需要對其進行組織,以使所有向量長度都相同。 tidyverse
gather()
和spread()
是tidyverse
包中的函數,可用於在長數據幀和寬數據幀之間進行轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.