2013-02-19 40 views
1

我中的R命名OP1DadosCelDez12數據幀如下:如何可以執行PROCV(或VLOOKUP,無論是在Excel文件),其中R

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中遇到困難。欣賞你的時間。

+2

您是否正在尋找R中等價的VLOOKUP?在這裏和其他地方已經有相當多的在線內容了,但是你可能會有更多的運氣來找到它,比如'VLOOKUP r help'作爲搜索條目 – Ben 2013-02-19 06:07:24

回答

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數據幀,什麼是agg0,agg4

另外,它似乎是你想做的事情比我在這裏顯示的更進一步,你可以編輯你的問題來更清楚地解釋你想做什麼?

+0

library(sqldf) agg0 < - as.data.frame(sqldf (「SELECT State,MunicípioFROM OP1DadosCelDez12 GROUP BY City」))對於我所需要的已足夠。非常感謝,本。 – acmoraes 2013-02-19 20:23:39

+0

有時'sqldf'語言可以比更常見的'R'方法更直觀。如果答案有幫助,請將其標記爲接受未來讀者的利益:http://meta.stackexchange.com/a/5235 – Ben 2013-02-19 21:27:16

相關問題