Atualizar valores numa matriz...

for (i in seq_along(valores_atuais)) matriz[matriz == valores_na_matriz[i]] = valores_atuais[i] b 2012/6/28 andrebvs <andrebvs@bol.com.br>:
Como atualizo alguns dos seguintes valores da matriz abaixo:
[,1] [,2] [,3] [,4] [,5] [1,] 3 19 22 27 34 [2,] 3 12 22 34 43 [3,] 3 12 27 43 54 [4,] 12 19 27 34 43 [5,] 4 16 21 36 41 [6,] 4 9 16 30 41 [7,] 4 9 21 30 36 [8,] 9 16 21 36 41 [9,] 5 8 24 35 47 [10,] 5 15 24 38 52 [11,] 5 8 15 35 38 [12,] 8 15 24 38 52 [13,] 7 11 23 39 46 [14,] 7 18 32 46 49 [15,] 7 11 18 23 39 [16,] 11 18 32 39 46 [17,] 3 16 23 35 54 [18,] 3 5 16 36 46 [19,] 3 5 23 35 46 [20,] 5 16 35 36 54 [21,] 4 7 22 30 47 [22,] 4 22 24 30 34 [23,] 4 7 24 34 47 [24,] 7 22 24 34 49 [25,] 8 19 21 32 43 [26,] 8 11 21 38 43 [27,] 8 19 32 38 50 [28,] 11 19 21 32 43 [29,] 9 12 18 39 41 [30,] 9 15 27 39 52 [31,] 9 12 15 18 27 [32,] 12 18 27 39 41 [33,] 3 15 21 35 39 [34,] 3 4 21 22 39 [35,] 3 15 22 35 47 [36,] 4 15 21 22 39 [37,] 5 7 19 38 46 [38,] 5 19 27 38 54 [39,] 5 7 23 27 46 [40,] 7 23 27 38 46
Os valores a serem atualizados (sbstituídos) da matriz são:
valores_na_matriz <- c(9,11,12,15,18,19,21,22,23,24,27,30,32,35,36,39,41,46,52,54,55,56,57,58)
Pelos correspondentes valores abaixo:
valores_atuais <- c(10,12,13,14,17,23,24,25,28,29,30,32,33,36,37,41,42,44,51,52,53,54,59,60)
ou seja, substituir na: 9 por 10, 11 por 12, 12 poe 13, ..., 58 por 60.
desde já agradeço!
Att. André
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

#exemplo dados<-matrix(sample(1:4,9,replace=T),ncol=3,nrow=3) dados #substituir x por y x<-c(2,3) y<-c(8,9) #substituição for (i in seq_along(dados)) { dados[dados == x[i]] <- y[i] } #final dados O que não funcionou? Utiliza o comando dput(suamatriz) aqui dai da pra testar o exemplo nela. E uma pergunta, vc quer trocar 11 por 12 e depois 12 por 13, ou seja na matriz final vai ficar onde era 11 e 12 um 13 ou so trocar uma vez? se vc tem : 11 11 12 12 vc quer 13 13 13 13 ou 12 12 13 13 ? Em 28 de junho de 2012 14:46, andrebvs <andrebvs@bol.com.br> escreveu:
Obg Benilton, mas o script não funcionou!
________________________________ Em 28/06/2012 15:02, Benilton Carvalho < beniltoncarvalho@gmail.com > escreveu:
for (i in seq_along(valores_atuais)) matriz[matriz == valores_na_matriz[i]] = valores_atuais[i]
b
2012/6/28 andrebvs :
Como atualizo alguns dos seguintes valores da matriz abaixo:
[,1] [,2] [,3] [,4] [,5] [1,] 3 19 22 27 34 [2,] 3 12 22 34 43 [3,] 3 12 27 43 54 [4,] 12 19 27 34 43 [5,] 4 16 21 36 41 [6,] 4 9 16 30 41 [7,] 4 9 21 30 36 [8,] 9 16 21 36 41 [9,] 5 8 24 35 47 [10,] 5 15 24 38 52 [11,] 5 8 15 35 38 [12,] 8 15 24 38 Â 52
[13,] 7 11 23 39 46 [14,] 7 18 32 46 49 [15,] 7 11 18 23 39 [16,] 11 18 32 39 46 [17,] 3 16 23 35 54 [18,] 3 5 16 36 46 [19,] 3 5 23 35 46 [20,] 5 16 35 36 54 [21,] 4 7 22 30 47 [22,] 4 22 24 30 34 [23,] 4 7 24 34 47 [24,] 7 22 24 34 49 [25,] 8 19 21 32 43 [26,] 8 11 21 38 43 [27,] 8 19 32 38 50 [28,] 11 19 21 32 43 [29,] 9 12 18 39 41 [30,] 9 15 27 39 52 [31,] 9 12 15 18Â � 27
[32,] 12 18 27 39 41 [33,] 3 15 21 35 39 [34,] 3 4 21 22 39 [35,] 3 15 22 35 47 [36,] 4 15 21 22 39 [37,] 5 7 19 38 46 [38,] 5 19 27 38 54 [39,] 5 7 23 27 46 [40,] 7 23 27 38 46
Os valores a serem atualizados (sbstituídos) da matriz são:
valores_na_matriz <- c(9,11,12,15,18,19,21,22,23,24,27,30,32,35,36,39,41,46,52,54,55,56,57,58)
Pelos correspondentes valores abaixo:
valores_atuais <- c(10,12,13,14,17,23,24,25,28,29,30,32,33,36,37,41,42,44,51,52,53,54,59,60)
ou seja, substituir na: 9 por 10, 11 por 12, 12 poe 13, ..., 58 por 60.
desde já agradeço!
Att. André
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Grato Augusto C. A. Ribas Site Pessoal: http://augustoribas.heliohost.org Lattes: http://lattes.cnpq.br/7355685961127056

É só salvar numa variável separada dados<-matrix(sample(1:4,27,replace=T),ncol=3) dados #substituir x por y x<-c(1,2) y<-c(2,4) #substituição dados2 <- dados for (i in seq_along(dados)) { dados[dados2 == x[i]] <- y[i] } #final dados2 # Dados originais dados # Dados alterados 2012/6/29 andrebvs <andrebvs@bol.com.br>
Bom dia Benilton!
Na verdade é só substituir de uma vez, porque se for substituir de um por um, o que for atualizado, vai atualizar novamente. Mas o que estou querendo é o seguinte:
Por exemplo:
M=c(3,19,22,27,34, 3,12,22,34,43, 3,12,27,43,54, 12,19,27,34,43, 4,16,21,36,41, 4,9,16,30,41, 4,9,21,30,36, 9,16,21,36,41, 5,8,24,35,47, 5,15,24,38,52)
Saída:
[1,] 3 19 22 27 34 [2,] 3 12 22 34 43 [3,] 3 12 27 43 54 [4,] 12 19 27 34 43 [5,] 4 16 21 36 41 [6,] 4 9 16 30 41 [7,] 4 9 21 30 36 [8,] 9 16 21 36 41 [9,] 5 8 24 35 47 [10,] 5 15 24 38 52
Trocar onde tem v1 por v2:
v1 < - c(9,11,12,15,18,19,21,22,23,24,27,30,32,35,36,39,41,46,52,54,55,56,57,58) v2 <-c(10,12,13,14,17,23,24,25,28,29,30,32,33,36,37,41,42,44,51,52,53,54,59,60)
Final desejado:
[1,] 3 23 25 30 34 [2,] 3 13 25 34 43 [3,] 3 13 30 43 52 [4,] 13 23 30 34 43 [5,] 4 16 24 37 42 ...
[10,] 5 14 29 38 51
É isso!
------------------------------ Em 28/06/2012 16:30, *Augusto Ribas < ribas.aca@gmail.com >* escreveu:
#exemplo dados<-matrix(sample(1:4,9,replace=T),ncol=3,nrow=3) dados
#substituir x por y x<-c(2,3) y<-c(8,9)
#substituição for (i in seq_along(dados)) { dados[dados == x[i]] <- y[i] }
#final dados
O que não funcionou? Utiliza o comando dput(suamatriz) aqui dai da pra testar o exemplo nela.
E uma pergunta, vc quer trocar 11 por 12 e depois 12 por 13, ou seja na matriz final vai ficar onde era 11 e 12 um 13 ou so trocar uma vez? se vc tem : 11 11 12 12
vc quer 13 13 13 13
ou 12 12 13 13 ?
Em 28 de junho de 2012 14:46, andrebvs escreveu:
Obg Benilton, mas o script não funcionou!
________________________________ Em 28/06/2012 15:02, Beni lton Carvalho < beniltoncarvalho@gmail.com >
escreveu:
for (i in seq_along(valores_atuais)) matriz[matriz == valores_na_matriz[i]] = valores_atuais[i]
b
2012/6/28 andrebvs :
Como atualizo alguns dos seguintes valores da matriz abaixo:
[,1] [,2] [,3] [,4] [,5] [1,] 3 19 22 27 34 [2,] 3 12 22 34 43 [3,] 3 12 27 43 54 [4,] 12 19 27 34 43 [5,] 4 16 21 36 41 [6,] 4 9 16 30 41 [7,] 4 9 21 30 36 [8,] 9 16 21 36 41 [9,] 5 8 24 35 47 [10,] 5 15 24 38 52 [11,] 5Â � 8 15 35 38
[12,] 8 15 24 38 Â 52
[13,] 7 11 23 39 46 [14,] 7 18 32 46 49 [15,] 7 11 18 23 39 [16,] 11 18 32 39 46 [17,] 3 16 23 35 54 [18,] 3 5 16 36 46 [19,] 3 5 23 35 46 [20,] 5 16 35 36 54 [21,] 4 7 22 30 47 [22,] 4 22 24 30 34 [23,] 4 7 24 34 47 [24,] 7 22 24 34 49 [25,] 8 19 21 32 43 [26,] 8 11 21 38 43 [27,] 8 19 32 38 50 [28,] 11 19 21 32 43 [29,] 9 12 18 39 41 [30,] 9 15 27 39 52 [31,] 9 12 15 18Â � 27
[32,] 12 18 27 39 41 [33,] 3 15 21 35 39 [34,] 3 4 21 22 39 [35,] 3 15 22 35 47 [36,] 4 15 21 22 39 [37,] 5 7 19 38 46 [38,] 5 19 27 38 54 [39,] 5 7 23 27 46 [40,] 7 23 27 38 46
Os valores a serem atualizados (sbstituídos) da matriz são:
valores_na_matriz <-
c(9,11,12,15,18,19,21,22,23,24,27,30,32,35,36,39,41,46,52,54,55,56,57,58)
Pelos correspondentes valores abai xo:
valores_atuais <-
c(10,12,13,14,17,23,24,25,28,29,30,32,33,36,37,41,42,44,51,52,53,54,59,60)
ou seja, substituir na: 9 por 10, 11 por 12, 12 poe 13, ..., 58 por 60.
desde já agradeço!
Att. André
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.b r https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Grato Augusto C. A. Ribas
Site Pessoal: http://augustoribas.he liohost.org<http://augustoribas.heliohost.org> Lattes: http://lattes.cnpq.br/7355685961127056 _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Olá a todos Duas coisas sobre tabulação de dados. Considerar ambas pode tornar possível executar uma tarefa com um BIG data.frame em R. 1) o pacote dataframe foi criado para melhorar a performance em trabalhar com data.frame. O autor desse pacote, Tim Hesterberg, trabalha o Google. Ele apresentou seu pacote no useR! 2012 e as idéias de programação utilizadas. O r-core member Luke Tierney implementou essas idéias no R base, na versão 2.15.1 (released a uma semana). Li isso em http://www.r-bloggers.com/r-2-15-1-includes-performance-improvements-inspire... e sugiro fortemente o upgrade do R para a versão 2.15.1, pois: - Tim Hesterberg created the dataframe package to speed up R for 500+ R users at Google, and the talk from his colleague Karl Millar on using Google's big-data infrastructure with R. - Tim reported that using the dataframe package with R 2.15.0 improved performance by 21% for creation and column subscripting, and by 14% for row subscripting. - Além dessa sugestão, o Tim Hesterberg fez também sugestão que melhora a performance da função tabulate(), usada pela função table(). A sugestão dele é usar dup=FALSE no .C() da tabulate(), que as vezes usamos papa chamar nossos códigos em C, correndo um certo risco. Esta sugestão evita duplicação de memória. Ou seja, a diferença está em conseguir ou não fazer uma tabela com um BIG data em R. Nos dois testes abaixo, fiz com as duas versões do R, n <- 1e5; ns=10 system.time(replicate(ns, data.frame(a=rep(gl(3,5),n)))) system.time(replicate(ns, table(rep(gl(3,5),n)))) houve redução, da versão 2.15.1 em relação a versão 2.15.0, de 22% no primeiro teste e 8% no segundo teste. 2) Ha alguns dias o Walmes mostrou-me um post no r-bloggers mostrando a eficiência do pacote data.table http://www.r-bloggers.com/transforming-subsets-of-data-in-r-with-by-ddply-an... Foi reportado nesse post que, usando a R 2.15.0, usar o pacote data.table é 95 vezes mais rápido que usar do.call com by e 120 vezes mais rápido que usar ddply (do pacote plyr). Testei o seguinte script com R 2.15.0 e R 2.15.1 (similar ao postado no blog) require(plyr) require(data.table) set.seed(1) df <- data.frame(Company=rep(paste("Company", 1:100),1000), Product=gl(50,200), Year=sort(rep(2002:2011,10000)), Sales=rnorm(100000,100,10)) fn <- function(x) x/sum(x) r1 <- system.time( R1 <- do.call("rbind", as.list( by(df, df[c("Company","Year")], transform, Share=fn(Sales)) )) ) r2 <- system.time( R2 <- ddply(df, c("Company", "Year"), transform, Share=fn(Sales)) ) r3 <- system.time({ dt <- data.table(df) setkey(dt, "Year", "Company") X <- dt[, list(SUM=sum(Sales)), by=key(dt)] R3 <- dt[X, list(Company, Sales, Product, Share=Sales/SUM)] }) Como o data.table já era otimizado, não houve redução significativa da versão R 2.15.0 para a R 2.15.1. Houve redução de 20% usando do.call com by ou usando ddply. Ou seja, usar o data.table ainda é muito mais rápido que usar do.call com by ou ddply. Att. Elias T. Krainski
participantes (5)
-
andrebvs
-
Augusto Ribas
-
Benilton Carvalho
-
Elias T. Krainski
-
Rodrigo Coster