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)
                           (...)

然后我创建了一个新的数据框,它应该有相同的变量,但每个城市只有一行。

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 回答