0

次のように、R に OP1DadosCelDez12 という名前のデータ フレームがあります。

State   City    QuedasConx  ConxEstab   Sol.ConxDadosAtend  Sol.ConxDados
SC  ABDON BATISTA   25071   2176654 2105688 2180192
SC  ABDON BATISTA   10319   1594057 1562627 1740117
SC  ADAMANTINA  79210   7723455 7468357 7772426
MG  ADOLFO  43230   2820074 2655908 2867880
MG  AGROLANDIA  120016  10633996    10273314    10836846
SP  AGROLANDIA  106545  9184706 8611340 9377591

集計関数を使用して、各都市の QuedasConx、ConxEstab、Sol.ConxDadosAtend、および Sol.ConxDados (数値) の各列を統合することができました。例えば:

agg1 <- aggregate(OP1DadosCelDez12$Sol.ConxDadosAtend,
        data.frame(OP1DadosCelDez12$Município), FUN=sum, na.rm=FALSE)
                           (...)

次に、同じ変数を持つ必要がある新しいデータ フレームを作成しましたが、都市ごとに 1 行のみです。

ClaroDadosMunDez12 <- data.frame(agg0,agg1$Município,agg1$QuedasConx,
agg2$ConxEstab,agg3$Sol.ConxDadosAtend,agg4$Sol.ConxDados)
colnames(ClaroDadosMunDez12)[1] <- "UF"
colnames(ClaroDadosMunDez12)[2] <- "Município"
colnames(ClaroDadosMunDez12)[3] <- "QuedasConx"
colnames(ClaroDadosMunDez12)[4] <- "ConxEstab"
colnames(ClaroDadosMunDez12)[5] <- "Sol.ConxDadosAtend"
colnames(ClaroDadosMunDez12)[6] <- "Sol.ConxDados"

望ましい結果は次のとおりです。

State   City    QuedasConx  ConxEstab   Sol.ConxDadosAtend  Sol.ConxDados
SC  ABDON BATISTA   35390   3770711 3668315 3920309
SC  ADAMANTINA  79210   7723455 7468357 7772426
MG  ADOLFO  43230   2820074 2655908 2867880
MG  AGROLANDIA  226561  19818702    18884654    20214437

私の問題は、各都市の一意の行の状態値を読み取って、これを (新しいデータ フレームの) 変数 OP1DadosMunDez12$UF に書き込むことができないことです。

MS EXCEL ではコマンド procv を使用してこれを簡単に実行できましたが、R では苦労しています。お時間をいただきありがとうございます。

4

1 に答える 1

2

「望ましい結果」として説明するものを得るためにできることは次のとおりです。

# input data
dat <- read.table(header= TRUE, text = "State    City    QuedasConx  ConxEstab   SolConxDadosAtend  SolConxDados
SC  ABDONBATISTA   25071   2176654 2105688 2180192
SC  ABDONBATISTA   10319   1594057 1562627 1740117
SC  ADAMANTINA  79210   7723455 7468357 7772426
MG  ADOLFO  43230   2820074 2655908 2867880
MG  AGROLANDIA  120016  10633996    10273314    10836846
SP  AGROLANDIA  106545  9184706 8611340 9377591")

# summarise by state
aggregate(dat[,3:6],by=list(dat[,2]),FUN=sum)

       Group.1 QuedasConx ConxEstab SolConxDadosAtend SolConxDados
1 ABDONBATISTA      35390   3770711           3668315      3920309
2   ADAMANTINA      79210   7723455           7468357      7772426
3       ADOLFO      43230   2820074           2655908      2867880
4   AGROLANDIA     226561  19818702          18884654     20214437

# this will give the same result
library(plyr)
ddply(dat, .(City), function(x) ( colSums(x[,3:6]) ))

# and this will also...
library(sqldf)
sqldf("SELECT City, SUM(QuedasConx), SUM(ConxEstab), SUM(SolConxDadosAtend), SUM(SolConxDados) FROM dat GROUP BY City")

あなたの質問のaggregateコードは私には機能せず、あなたのデータフレームを再現できませClaroDadosMunDez12ん。agg0agg4

また、私がここに示したことよりもさらに何かをしたいようです。質問を編集して、何をしたいのかをより明確に説明できますか?

于 2013-02-19T07:08:51.080 に答える