0

おそらく非常に簡単な質問がありますが、あなたが私を助けてくれることを願っています. アメリカの各州のリベラルの割合の加重平均を計算する必要があります。このコマンドでリベラルの「生の」比率を計算しました。

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

あなたの一人が私を助けてくれることを願っています!前もって感謝します!

ベスト・ソフィー

4

1 に答える 1

1

あなたの問題は、変数NP変数の「列」の1つが因子として格納されており、因子を意味のあるように分割できないことです。以下では、データセットを使用して再現可能な例を作成し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)
于 2015-03-01T18:13:57.520 に答える