我有一個由三列組成的數據幀(請參閱代碼示例)。第一列包含類別(a),第二列是觀測數量(b),第三列是這些觀測值的平均值(c)。R:在條件下替換數據幀中的值
#create a test df
a<-factor(c("aaa","aaa","aaa","ddd","eee","ddd","aaa","ddd"))
b<-c(3,4,1,3,5,7,3,2)
c<-c(1,2,NA,4,5,6,7,NA)
df.abc<-data.frame(a=a,b=b,c=c)
df.abc
如果觀察的數目爲1或2,其中標記爲缺失值(NA)的條目。
因此,我的功能的目的是用每個類別的平均值替換這些缺失值。
我帶了我一段時間,但我得到了一個功能工作,用一個類別代替所有缺失值(如果觀察結果爲1)。它看起來像這樣:
#function to substitue the missing values in row c by their means
#according to their categories
function.abc<-function(x){
ifelse(
(df.abc[,1]==x)&(df.abc[,2]==1),
mean(df.abc$c[df.abc$a ==x],na.rm=TRUE),
df.abc[,3]
)
}
測試這一功能:
#test the function for the category "ccc"
function.abc("aaa")
它工作的很好(但僅僅是平均值,而不是平均平均值)的輸出是:
[1] 1.000000 2.000000 3.333333 4.000000 5.000000 6.000000 7.000000不適用
現在我的問題是,我有很多類別(n = 32),我試圖將這個函數應用於包含我的矢量類別。在這種情況下的simpe例子是:
#test the function for a testvector
test.vector<-c("aaa","ddd")
function.abc(test.vector)
輸出爲:
[1] 1.0 2.0 4.5 4.0 5.0 6.0 7.0 NA
所以,很顯然,這將不起作用了...
任何人都可以幫我重新安排功能嗎?我很新的節目,它仍然是一個很大的挑戰,我設計短期和goodworking功能...
編輯:
我想輸出是: [1] 1.000000 2.000000 3.20000 4.000000 5.000000 6.000000 7.000000 5.000000
使得組aaa的平均(3.20000)代入AAA NA值和組DDD的平均值(5.0000000)代入NA在DDD ...
目前尚不清楚你想要的最後一種情況下可能返回的。 –
他會想'[1] 1.000000 2.000000 3.333333 4.000000 5.000000 6.000000 7.000000 5.00000'我相信。 –
考慮到問題的陳述,我不認爲所提供的答案都是正確的。如果三個項目在值爲'= c(1,2,7)'的類別「aaa」中,計數爲「= c(3,4,3)',那麼加權平均值不是3.3333,而是3.2。如果我對問題陳述的理解是錯誤的,那麼也許可以修改這個問題來澄清爲什麼計數不能用於計算平均值? –