我有一个由三列组成的数据帧(请参阅代码示例)。第一列包含类别(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。如果我对问题陈述的理解是错误的,那么也许可以修改这个问题来澄清为什么计数不能用于计算平均值? –