Antonio Rodriguez Andres
2019-Mar-06 14:44 UTC
[R-es] Crear una variable tipo factor a partir de un vector de caracteres
Si lo que quiero es crear una variable llamada por ejemplo region (del tipo factor) con esos 5 valores On Wed, 6 Mar 2019 at 15:41, Xavier-Andoni Tibau Alberdi < xavitibau en gmail.com> wrote:> No, No. Fíjate en el Ifelse(condición, valor si positivo, valor si > negativo). > > Si, x %in% ca entonces el valor devuelto es "ca", un factor. En caso > negativo, vamos al siguiente bloque iflese, que comprueba si el país esta > en el siguiente grupo, na. Si está en na nos devuelve "na". Vamos, que la > función mira en que grupo esta ese país y te devuelve una string, > correspondiente al país. Así que ahora tienes un factor, con 5 posibles > valores ("ca", "na", ..., "ea"). Es lo que quieres no? > > Xavier Tibau > > Missatge de Antonio Rodriguez Andres <antoniorodriguezandres70 en gmail.com> > del dia dc., 6 de març 2019 a les 15:34: > >> Pero eso es para crear variables binarias tipo 0-1 si el pais pertence a >> un determinado grupo. Lo que quiero es crear una variable de tipo factor >> con esos 5 niveles, sabiendo que tengo en el dataframe una variable llamada >> Country, con el nombre del pais. >> Gracias >> >> On Wed, 6 Mar 2019 at 15:27, Xavier-Andoni Tibau Alberdi < >> xavitibau en gmail.com> wrote: >> >>> Buenas, >>> >>> Para ello yo uso el operador %in%, que me dice si algo esta dentro de un >>> vector. Luego hago bucles de if else, pero usando la función iflese(). Si >>> país X esta en países lista ca, entonces "ca",etc. Puedes crear una función >>> que englobe ese iflese(), para aplicarla para cada columna del dataframe. >>> >>> Algo así como: >>> >>> func1 <- func (x) {ifelse(x %in% ca, "ca", ifelse(x %in% na,"na", ..., >>> ifelse(x %in% ea, "ea", "otros"))...)} >>> >>> espero que te sirva! >>> >>> Xavier Tibau >>> >>> >>> >>> Missatge de Antonio Rodriguez Andres <antoniorodriguezandres70 en gmail.com> >>> del dia dc., 6 de març 2019 a les 15:10: >>> >>>> Hola estimados miembros de la comunidad de R >>>> >>>> Tengo un conjunto de datos, donde tengo observaciones por países y por >>>> año. >>>> Una de las variables del dataframe es el nombre del país. Queremos >>>> dividir >>>> los países, que son países africanos de acuerdo a 5 regiones: norte de >>>> africa, africa del este, sur africa, etc >>>> >>>> Yo lo que he hecho ha sido crear vectores con el nombre de cada uno de >>>> los >>>> países en cada uno de ellos, por ejemplo este de Africa Central, >>>> >>>> ca <- c("Angola", "Cameroon", "Cabo Verde", "Central African Republic", >>>> "Chad","Equatorial Guinea", "Eritrea", "Ethiopia", >>>> "Gabon", "Sao Tome and Principe") >>>> class(ca) >>>> character >>>> >>>> luego hice un ifelse para crear una variable binaria 1 si es pais de >>>> Central Africa y cero sino lo es >>>> >>>> afdata$Country.centralafrica <- ifelse(afdata$Country %in% ca,1,0) >>>> >>>> Sin embargo, para el análisis podría ser más interesante crear una >>>> variable >>>> nueva por ejemplo region y tratarla como factor,. Mi pregunta es como >>>> podria pasar esos 5 vectores con el nombre de los paises de cada region >>>> a >>>> una sola variable tratada como un factor y con esos 5 niveles ( 5 >>>> regiones). Lo que he tratado es de hacer esto para genera una nueva >>>> variable en el dataframe, pero me da que todo es igual false, en el >>>> valor, >>>> >>>> afdata$region <- with(afdata,{ >>>> (Country == "ca" |Country == "na" | Country == "sa" | Country == "wa" >>>> | >>>> Country == "ea") >>>> }) >>>> Debo de indicar otra condición? >>>> >>>> Agradezco alguna pista >>>> >>>> -- >>>> >>>> Member, Editorial Committee, *The Economic and Labour Relations Review* >>>> (a >>>> SAGE journal) >>>> >>>> http://elr.sagepub.com/ >>>> >>>> Member, Editorial Committee, African Journal of Economic and Management >>>> Studies >>>> >>>> >>>> http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems >>>> >>>> https://www.researchgate.net/profile/Antonio_Andres (Research Gate >>>> profile) >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> _______________________________________________ >>>> R-help-es mailing list >>>> R-help-es en r-project.org >>>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>>> >>> >> >> -- >> >> Member, Editorial Committee, *The Economic and Labour Relations Review* (a >> SAGE journal) >> >> http://elr.sagepub.com/ >> >> Member, Editorial Committee, African Journal of Economic and Management >> Studies >> >> >> http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems >> >> https://www.researchgate.net/profile/Antonio_Andres (Research Gate >> profile) >> >> >>-- Member, Editorial Committee, *The Economic and Labour Relations Review* (a SAGE journal) http://elr.sagepub.com/ Member, Editorial Committee, African Journal of Economic and Management Studies http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems https://www.researchgate.net/profile/Antonio_Andres (Research Gate profile) [[alternative HTML version deleted]]
Xavier-Andoni Tibau Alberdi
2019-Mar-06 14:46 UTC
[R-es] Crear una variable tipo factor a partir de un vector de caracteres
Pues ahí lo tienes. Usa %in% para ver si esta en ese grupo, y en caso de estarlo pones el nombre del grupo. Aquí un ejemplo. https://www.datamentor.io/r-programming/ifelse-function/ Saludos, Xavi Missatge de Antonio Rodriguez Andres <antoniorodriguezandres70 en gmail.com> del dia dc., 6 de març 2019 a les 15:44:> Si lo que quiero es crear una variable llamada por ejemplo region (del > tipo factor) con esos 5 valores > > On Wed, 6 Mar 2019 at 15:41, Xavier-Andoni Tibau Alberdi < > xavitibau en gmail.com> wrote: > >> No, No. Fíjate en el Ifelse(condición, valor si positivo, valor si >> negativo). >> >> Si, x %in% ca entonces el valor devuelto es "ca", un factor. En caso >> negativo, vamos al siguiente bloque iflese, que comprueba si el país esta >> en el siguiente grupo, na. Si está en na nos devuelve "na". Vamos, que la >> función mira en que grupo esta ese país y te devuelve una string, >> correspondiente al país. Así que ahora tienes un factor, con 5 posibles >> valores ("ca", "na", ..., "ea"). Es lo que quieres no? >> >> Xavier Tibau >> >> Missatge de Antonio Rodriguez Andres <antoniorodriguezandres70 en gmail.com> >> del dia dc., 6 de març 2019 a les 15:34: >> >>> Pero eso es para crear variables binarias tipo 0-1 si el pais pertence a >>> un determinado grupo. Lo que quiero es crear una variable de tipo factor >>> con esos 5 niveles, sabiendo que tengo en el dataframe una variable llamada >>> Country, con el nombre del pais. >>> Gracias >>> >>> On Wed, 6 Mar 2019 at 15:27, Xavier-Andoni Tibau Alberdi < >>> xavitibau en gmail.com> wrote: >>> >>>> Buenas, >>>> >>>> Para ello yo uso el operador %in%, que me dice si algo esta dentro de >>>> un vector. Luego hago bucles de if else, pero usando la función iflese(). >>>> Si país X esta en países lista ca, entonces "ca",etc. Puedes crear una >>>> función que englobe ese iflese(), para aplicarla para cada columna del >>>> dataframe. >>>> >>>> Algo así como: >>>> >>>> func1 <- func (x) {ifelse(x %in% ca, "ca", ifelse(x %in% na,"na", ..., >>>> ifelse(x %in% ea, "ea", "otros"))...)} >>>> >>>> espero que te sirva! >>>> >>>> Xavier Tibau >>>> >>>> >>>> >>>> Missatge de Antonio Rodriguez Andres < >>>> antoniorodriguezandres70 en gmail.com> del dia dc., 6 de març 2019 a les >>>> 15:10: >>>> >>>>> Hola estimados miembros de la comunidad de R >>>>> >>>>> Tengo un conjunto de datos, donde tengo observaciones por países y por >>>>> año. >>>>> Una de las variables del dataframe es el nombre del país. Queremos >>>>> dividir >>>>> los países, que son países africanos de acuerdo a 5 regiones: norte de >>>>> africa, africa del este, sur africa, etc >>>>> >>>>> Yo lo que he hecho ha sido crear vectores con el nombre de cada uno de >>>>> los >>>>> países en cada uno de ellos, por ejemplo este de Africa Central, >>>>> >>>>> ca <- c("Angola", "Cameroon", "Cabo Verde", "Central African Republic", >>>>> "Chad","Equatorial Guinea", "Eritrea", "Ethiopia", >>>>> "Gabon", "Sao Tome and Principe") >>>>> class(ca) >>>>> character >>>>> >>>>> luego hice un ifelse para crear una variable binaria 1 si es pais de >>>>> Central Africa y cero sino lo es >>>>> >>>>> afdata$Country.centralafrica <- ifelse(afdata$Country %in% ca,1,0) >>>>> >>>>> Sin embargo, para el análisis podría ser más interesante crear una >>>>> variable >>>>> nueva por ejemplo region y tratarla como factor,. Mi pregunta es como >>>>> podria pasar esos 5 vectores con el nombre de los paises de cada >>>>> region a >>>>> una sola variable tratada como un factor y con esos 5 niveles ( 5 >>>>> regiones). Lo que he tratado es de hacer esto para genera una nueva >>>>> variable en el dataframe, pero me da que todo es igual false, en el >>>>> valor, >>>>> >>>>> afdata$region <- with(afdata,{ >>>>> (Country == "ca" |Country == "na" | Country == "sa" | Country =>>>>> "wa" | >>>>> Country == "ea") >>>>> }) >>>>> Debo de indicar otra condición? >>>>> >>>>> Agradezco alguna pista >>>>> >>>>> -- >>>>> >>>>> Member, Editorial Committee, *The Economic and Labour Relations >>>>> Review* (a >>>>> SAGE journal) >>>>> >>>>> http://elr.sagepub.com/ >>>>> >>>>> Member, Editorial Committee, African Journal of Economic and Management >>>>> Studies >>>>> >>>>> >>>>> http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems >>>>> >>>>> https://www.researchgate.net/profile/Antonio_Andres (Research Gate >>>>> profile) >>>>> >>>>> [[alternative HTML version deleted]] >>>>> >>>>> _______________________________________________ >>>>> R-help-es mailing list >>>>> R-help-es en r-project.org >>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>>>> >>>> >>> >>> -- >>> >>> Member, Editorial Committee, *The Economic and Labour Relations Review* (a >>> SAGE journal) >>> >>> http://elr.sagepub.com/ >>> >>> Member, Editorial Committee, African Journal of Economic and Management >>> Studies >>> >>> >>> http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems >>> >>> https://www.researchgate.net/profile/Antonio_Andres (Research Gate >>> profile) >>> >>> >>> > > -- > > Member, Editorial Committee, *The Economic and Labour Relations Review* (a > SAGE journal) > > http://elr.sagepub.com/ > > Member, Editorial Committee, African Journal of Economic and Management > Studies > > > http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems > > https://www.researchgate.net/profile/Antonio_Andres (Research Gate > profile) > > >[[alternative HTML version deleted]]
Antonio Rodriguez Andres
2019-Mar-06 14:48 UTC
[R-es] Crear una variable tipo factor a partir de un vector de caracteres
Gracias On Wed, 6 Mar 2019 at 15:47, Xavier-Andoni Tibau Alberdi < xavitibau en gmail.com> wrote:> Pues ahí lo tienes. Usa %in% para ver si esta en ese grupo, y en caso de > estarlo pones el nombre del grupo. Aquí un ejemplo. > https://www.datamentor.io/r-programming/ifelse-function/ > > Saludos, > > Xavi > > Missatge de Antonio Rodriguez Andres <antoniorodriguezandres70 en gmail.com> > del dia dc., 6 de març 2019 a les 15:44: > >> Si lo que quiero es crear una variable llamada por ejemplo region (del >> tipo factor) con esos 5 valores >> >> On Wed, 6 Mar 2019 at 15:41, Xavier-Andoni Tibau Alberdi < >> xavitibau en gmail.com> wrote: >> >>> No, No. Fíjate en el Ifelse(condición, valor si positivo, valor si >>> negativo). >>> >>> Si, x %in% ca entonces el valor devuelto es "ca", un factor. En caso >>> negativo, vamos al siguiente bloque iflese, que comprueba si el país esta >>> en el siguiente grupo, na. Si está en na nos devuelve "na". Vamos, que la >>> función mira en que grupo esta ese país y te devuelve una string, >>> correspondiente al país. Así que ahora tienes un factor, con 5 posibles >>> valores ("ca", "na", ..., "ea"). Es lo que quieres no? >>> >>> Xavier Tibau >>> >>> Missatge de Antonio Rodriguez Andres <antoniorodriguezandres70 en gmail.com> >>> del dia dc., 6 de març 2019 a les 15:34: >>> >>>> Pero eso es para crear variables binarias tipo 0-1 si el pais pertence >>>> a un determinado grupo. Lo que quiero es crear una variable de tipo factor >>>> con esos 5 niveles, sabiendo que tengo en el dataframe una variable llamada >>>> Country, con el nombre del pais. >>>> Gracias >>>> >>>> On Wed, 6 Mar 2019 at 15:27, Xavier-Andoni Tibau Alberdi < >>>> xavitibau en gmail.com> wrote: >>>> >>>>> Buenas, >>>>> >>>>> Para ello yo uso el operador %in%, que me dice si algo esta dentro de >>>>> un vector. Luego hago bucles de if else, pero usando la función iflese(). >>>>> Si país X esta en países lista ca, entonces "ca",etc. Puedes crear una >>>>> función que englobe ese iflese(), para aplicarla para cada columna del >>>>> dataframe. >>>>> >>>>> Algo así como: >>>>> >>>>> func1 <- func (x) {ifelse(x %in% ca, "ca", ifelse(x %in% na,"na", ..., >>>>> ifelse(x %in% ea, "ea", "otros"))...)} >>>>> >>>>> espero que te sirva! >>>>> >>>>> Xavier Tibau >>>>> >>>>> >>>>> >>>>> Missatge de Antonio Rodriguez Andres < >>>>> antoniorodriguezandres70 en gmail.com> del dia dc., 6 de març 2019 a les >>>>> 15:10: >>>>> >>>>>> Hola estimados miembros de la comunidad de R >>>>>> >>>>>> Tengo un conjunto de datos, donde tengo observaciones por países y >>>>>> por año. >>>>>> Una de las variables del dataframe es el nombre del país. Queremos >>>>>> dividir >>>>>> los países, que son países africanos de acuerdo a 5 regiones: norte de >>>>>> africa, africa del este, sur africa, etc >>>>>> >>>>>> Yo lo que he hecho ha sido crear vectores con el nombre de cada uno >>>>>> de los >>>>>> países en cada uno de ellos, por ejemplo este de Africa Central, >>>>>> >>>>>> ca <- c("Angola", "Cameroon", "Cabo Verde", "Central African >>>>>> Republic", >>>>>> "Chad","Equatorial Guinea", "Eritrea", "Ethiopia", >>>>>> "Gabon", "Sao Tome and Principe") >>>>>> class(ca) >>>>>> character >>>>>> >>>>>> luego hice un ifelse para crear una variable binaria 1 si es pais de >>>>>> Central Africa y cero sino lo es >>>>>> >>>>>> afdata$Country.centralafrica <- ifelse(afdata$Country %in% ca,1,0) >>>>>> >>>>>> Sin embargo, para el análisis podría ser más interesante crear una >>>>>> variable >>>>>> nueva por ejemplo region y tratarla como factor,. Mi pregunta es como >>>>>> podria pasar esos 5 vectores con el nombre de los paises de cada >>>>>> region a >>>>>> una sola variable tratada como un factor y con esos 5 niveles ( 5 >>>>>> regiones). Lo que he tratado es de hacer esto para genera una nueva >>>>>> variable en el dataframe, pero me da que todo es igual false, en el >>>>>> valor, >>>>>> >>>>>> afdata$region <- with(afdata,{ >>>>>> (Country == "ca" |Country == "na" | Country == "sa" | Country =>>>>>> "wa" | >>>>>> Country == "ea") >>>>>> }) >>>>>> Debo de indicar otra condición? >>>>>> >>>>>> Agradezco alguna pista >>>>>> >>>>>> -- >>>>>> >>>>>> Member, Editorial Committee, *The Economic and Labour Relations >>>>>> Review* (a >>>>>> SAGE journal) >>>>>> >>>>>> http://elr.sagepub.com/ >>>>>> >>>>>> Member, Editorial Committee, African Journal of Economic and >>>>>> Management >>>>>> Studies >>>>>> >>>>>> >>>>>> http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems >>>>>> >>>>>> https://www.researchgate.net/profile/Antonio_Andres (Research Gate >>>>>> profile) >>>>>> >>>>>> [[alternative HTML version deleted]] >>>>>> >>>>>> _______________________________________________ >>>>>> R-help-es mailing list >>>>>> R-help-es en r-project.org >>>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>>>>> >>>>> >>>> >>>> -- >>>> >>>> Member, Editorial Committee, *The Economic and Labour Relations Review* (a >>>> SAGE journal) >>>> >>>> http://elr.sagepub.com/ >>>> >>>> Member, Editorial Committee, African Journal of Economic and Management >>>> Studies >>>> >>>> >>>> http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems >>>> >>>> https://www.researchgate.net/profile/Antonio_Andres (Research Gate >>>> profile) >>>> >>>> >>>> >> >> -- >> >> Member, Editorial Committee, *The Economic and Labour Relations Review* (a >> SAGE journal) >> >> http://elr.sagepub.com/ >> >> Member, Editorial Committee, African Journal of Economic and Management >> Studies >> >> >> http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems >> >> https://www.researchgate.net/profile/Antonio_Andres (Research Gate >> profile) >> >> >>-- Member, Editorial Committee, *The Economic and Labour Relations Review* (a SAGE journal) http://elr.sagepub.com/ Member, Editorial Committee, African Journal of Economic and Management Studies http://emeraldgrouppublishing.com/products/journals/editorial_team.htm?id=ajems https://www.researchgate.net/profile/Antonio_Andres (Research Gate profile) [[alternative HTML version deleted]]