Antonio Rodriguez Andres
2019-Mar-06 14:09 UTC
[R-es] Crear una variable tipo factor a partir de un vector de caracteres
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]]
Xavier-Andoni Tibau Alberdi
2019-Mar-06 14:26 UTC
[R-es] Crear una variable tipo factor a partir de un vector de caracteres
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 >[[alternative HTML version deleted]]
Antonio Rodriguez Andres
2019-Mar-06 14:34 UTC
[R-es] Crear una variable tipo factor a partir de un vector de caracteres
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) [[alternative HTML version deleted]]