我有一个非常简单的问题,希望你能帮助我。 我必须计算每个美国州的自由比例加权平均数。我通过这个命令计算了“原始”比例的自由度:
liberal.state<-aggregate(liberal, by=list(state), mean ,na.rm=TRUE)
#liberal=binary variable
这很好用!
我还有一个样本大小pr的功能。状态:
sample.state<-aggregate(rid, list(state=state), length)
#rid=id for respondent
这也很好用!
我想衡量每个州的自由比例加权平均数。 我用这个公式:
N <- sample.state
p <- liberal.state
w.avg <-sum(N*p)/sum(N)
但我不断收到此错误消息:
Error in FUN(X[[1L]], ...) :
only defined on a data frame with all numeric variables
In addition: Warning message:
In Ops.factor(left, right) : ‘*’ not meaningful for factors
我希望你们中的一个能够帮助我!提前谢谢!
最佳Sofie
答案 0 :(得分:1)
您的问题是,N
和P
变量中的某个“列”存储为一个因素,您无法有效地划分因子。下面我使用iris
数据集构建一个可重现的示例。
> data(iris)
> liberal.flowers<-aggregate(iris$Sepal.Length, by=list(iris$Species), mean ,na.rm=TRUE)
> sample.flowers<-aggregate(row.names(iris),list(iris$Species), length)
>
> N <- sample.flowers
> p <- liberal.flowers
> w.avg <-sum(N*p)/sum(N)
Error in FUN(X[[1L]], ...) :
only defined on a data frame with all numeric variables
In addition: Warning message:
In Ops.factor(left, right) : ‘*’ not meaningful for factors
让我们看一下对象的样子:
liberal.flowers
Group.1 x
1 setosa 5.006
2 versicolor 5.936
3 virginica 6.588
sample.flowers
Group.1 x
1 setosa 50
2 versicolor 50
3 virginica 50
您的Group.1
变量是factor
。
str(sample.flowers)
'data.frame': 3 obs. of 2 variables:
$ Group.1: Factor w/ 3 levels "setosa","versicolor",..: 1 2 3
$ x : int 50 50 50
merge.dat<-merge(sample.flowers,liberal.flowers,by="Group.1")
merge.dat
Group.1 x.x x.y
1 setosa 50 5.006
2 versicolor 50 5.936
3 virginica 50 6.588
N <- merge.dat[,2] #Column 2 length
P <- merge.dat[,3] #Column 3 mean
merge.dat$w.avg <-sum(N*P)/sum(N)
merge.dat
Group.1 x.x x.y w.avg
1 setosa 50 5.006 5.843333
2 versicolor 50 5.936 5.843333
3 virginica 50 6.588 5.843333
注意您的加权平均值没有返回我认为您想要的,因为所有加权平均值都是相同的。我相信你会更喜欢以下。
merge.dat$w.avg <-N*P/sum(N)