我正在嘗試創建一個回圈遍歷整個資料框的函式。如果該列是數字,它將回傳平均值,但如果該列是一個因子,則必須做更多的事情才能獲得整體平均值。目前,我不太關心因子中類別的頻率——我對此有研究原因。到目前為止,我已經能夠將其中的一些拼湊起來,但我知道我無處可去完成這一點。到目前為止,這是我的代碼:
#basic data frame 3 variables
dat = data.frame("index" = c(1, 2, 3, 4, 5),
"age" = c(24, 25, 42, 56, 22),
"sex" = c(0,1,1,0,0))
mean(dat$sex)
mean(dat$age)
#converting sex into a factor
dat[,3] = as.factor(dat[,3])
#working on the if structure to calculate the mean for all of the variables
me_func = function(x){
for (i in seq_along(x)){
if (is.factor(x)==TRUE){
return(mean(as.numeric(as.character(x), na.rm=TRUE)))
} else {
return(mean(x), na.rm=TRUE)
}
}
}
me_func(dat)
因為我正在嘗試使用 R 學習編碼,所以我知道我錯過了很多。我在函式呼叫中的意圖是使用資料框名稱作為輸入。當我將它用于我的研究時,將有更大的資料框,因此列出名稱本身會相當麻煩。這也使事情變得復雜,因為必須忽略 id 變數才能得到正確的結果。
最終,我需要該函式為因子變數回傳正確的平均值 0.40,為數值變數回傳 33.8。我需要能夠學習這個程序,因為它似乎對我在可預見的未來將要進行的資料分析很重要。我想到了 ColMeans,但這并沒有讓我擺脫回圈或某種型別的應用。必須將這些因素強制轉換為數字才能做到這一點,并且強制可能提供無意義的手段,因為 R 在強制時傾向于將 0 更改為 2,或者至少在我極其有限的經驗中似乎去做這個。我合法地只想要整個資料幀的所有非 id 變數/列的平均值。有人對這將如何作業有任何想法嗎?如果我錯過了已經這樣做的帖子,請隨時指出我的方向。謝謝
uj5u.com熱心網友回復:
您可以創建my_func一個獲取向量平均值的函式(洗掉 for 回圈),然后使用sapply.
me_func = function(x){
if (is.factor(x)==TRUE){
return(mean(as.numeric(as.character(x)), na.rm=TRUE))
} else {
return(mean(x, na.rm=TRUE))
}
}
> sapply(dat[,-1], me_func)
age sex
33.8 0.4
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/525635.html
標籤:r功能循环意思是因素
上一篇:Laravel驗證規則
