entao vc precisa dar um exemplo reproduzivel do seu conjunto de dados...

se o mesmo problema acontecer com:

f('x', dados[1:10,])

entao cole aqui o resultado de:

dput(dados[1:10,])

se o problema nao acontecer nesse exemplo reduzido, siga as recomendacoes do guia de postagem (no rodape de toda mensagem) no que se refere a compartilhar arquivos.

benilton


2012/4/11 Sérgio Henrique almeida da silva ju <sergio.edfisica@gmail.com>
Oi Benilton

Dá o seguinte erro

dados$x2<- f('x', dados)

Error in substr(dat[[v]], dat[[v1]], n) : invalid substring argument(s)



Em 11 de abril de 2012 14:48, Benilton Carvalho <beniltoncarvalho@gmail.com> escreveu:

o codigo q enviei deve fazer algo proximo do q vc quer... so' copiar/colar e verificar os resultados...

2012/4/11 Sérgio Henrique almeida da silva ju <sergio.edfisica@gmail.com>
Oi Benilton

Obrigado pela resposta!

Tentei colocar o exemplo mais reproduzível o possível, mas o banco que estou trabalhando é um pouco complicado mesmo, por isso a dificuldade...

Sim, quando falo 2a linha é o 2o caractere da string.

Quando tem o 0 significa que não existe o valor (A360) na linha da variável, portanto eu busco valor a partir da posição do caractere indicado pela variável.
 No SPSS eu uso o seguinte comando:

IF  (x1 = 2) x2=CHAR.SUBSTR(x,2,4).
IF  (x1 = 7) x2=CHAR.SUBSTR(x,7,4).
IF  (x1 = 12) x2=CHAR.SUBSTR(x,12,4).
IF  (y1 = 2) y2=CHAR.SUBSTR(y,2,4).
IF  (y1 = 7) y2=CHAR.SUBSTR(y,7,4).
IF  (y1 = 12) y2=CHAR.SUBSTR(y,12,4).

Em 11 de abril de 2012 14:02, Benilton Carvalho <beniltoncarvalho@gmail.com> escreveu:

1) assumindo q qdo vc fala "2a linha" vc quer dizer "2o caractere da string"... 2) colocando um exemplo apropriadamente reproduzivel... 3) assumindo q se vc tiver 0, vc nao quer nada na saida...

tmp = data.frame(x=c('*A360', '*A330', '*A340', '*A340*A360', '*A330*A340*A360'),
                          y=c('*A340*A360', '*A360', '*A330*A340*A360', '*A340', '*A330'),
                          x1=c(2, 0, 0, 7, 12),
                          y1=c(7, 2, 12, 0, 0), stringsAsFactors=FALSE)

f = function(v, dat, v1=paste(v, 1, sep='')){
n = ifelse(dat[[v1]] > 0, nchar(dat[[v]]), NA)
substr(dat[[v]], dat[[v1]], n)
}

f('x', tmp)
f('y', tmp)

b




2012/4/11 Sérgio Henrique almeida da silva ju <sergio.edfisica@gmail.com>
Olá 

alguns dias atrás vocês me ajudaram na criação de variáveis (x1 e y1), onde a mesmas me mostram a posição inicial de um certo valor (A360) em uma outra variável:

A variável x1 mostra que o A360 inicia-se na segunda linha da variável X e assim por diante.   

Só que agora eu queria criar uma outra variável x2 e y2 que extrai o valor de A360 das variáveis

exemplo

Se x1 = 2 eu quero uma substring de x começando da 2ª linha até a 4ª me dando dessa forma o valor A360
Se y1 = 7 eu quero uma substring de y começando da 7ª linha até a 10ª me dando dessa forma o valor A360

e assim por diante.

Como faço?

x y x1  y1
*A360 *A340*A360 2 7
*A330 *A360 0 2
*A340 *A330*A340*360 0 12
*A340*A360 *A340 7 0
*A330*A340*360 *A330 12 0

Obrigado

--
Sérgio Henrique Almeida da Silva Junior
Doutorando em Epidemiologia em Saúde Pública
Escola Nacional de Saúde Pública Sérgio Arouca - ENSP/FIOCRUZ
http://lattes.cnpq.br/1611345552843383
Tel: (21) 94429486/78101651 id: 123*20942



_______________________________________________
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.



--
Sérgio Henrique Almeida da Silva Junior
Doutorando em Epidemiologia em Saúde Pública
Escola Nacional de Saúde Pública Sérgio Arouca - ENSP/FIOCRUZ
http://lattes.cnpq.br/1611345552843383
Tel: (21) 94429486/78101651 id: 123*20942



_______________________________________________
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.



--
Sérgio Henrique Almeida da Silva Junior
Doutorando em Epidemiologia em Saúde Pública
Escola Nacional de Saúde Pública Sérgio Arouca - ENSP/FIOCRUZ
http://lattes.cnpq.br/1611345552843383
Tel: (21) 94429486/78101651 id: 123*20942



_______________________________________________
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.