Gracias de antemano por su consejo. Estoy tratando de crear una nueva variable sobre varios objetos en un bucle. Estas nuevas variables son generadas por una función.

Por ejemplo, tengo tres conjuntos de datos a nivel de país:

# Generate Example Data
`enter code here`pop <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(290,300,29,30,50,55))
gas <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(3.10,1.80,4.50,2.50,4.50,2.50))
cars <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(2.1,2.2,1.8,1.9,1.3,1.3))

Quiero crear una nueva variable, llamada "countrycode", usando el comando countrycode () en el paquete countrycode.

Realizaría la operación en objetos individuales como este:

library(countrycode)
pop$ccode <- countrycode(pop$country,"iso2c","cown")
pop$id <- (pop$ccode*10000)+pop$year

Pero tengo una gran cantidad de objetos. Esperaba hacer esto en un bucle, como este

# Create list of variables
vars <- c("pop","gas","cars")
for (i in vars){
  i$ccode <- countrycode(country,"iso2c","cown")
  i$id <- (i$ccode*10000)+i$year
}

Pero eso no funciona. He intentado hacer esto usando asignar () en bucles y aplicar () , pero soy demasiado denso para entender cómo hacer que esto funcione en mi caso.

Si alguien me pudiera dar un ejemplo de cómo hacer esto con mi propio tipo de datos, estaría muy agradecido.

0
Joe C 29 ene. 2016 a las 21:02

2 respuestas

La mejor respuesta

Un agradecimiento especial a @Pawel por proporcionar la información que faltaba necesaria para resolver el problema. La solucion fue:

rm(list=ls())
pop <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(290,300,29,30,50,55))
gas <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(3.10,1.80,4.50,2.50,4.50,2.50))
cars <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(2.1,2.2,1.8,1.9,1.3,1.3))


attachCodes <- function(dframe)
{
  df <- dframe
  df$ccode <- countrycode(df$country,"iso2c","cown")
  df$id <- (df$ccode*10000)+df$year
  return(df)
}

names <- list("pop","gas","cars")
for(i in names){
  assign(i,attachCodes(get(i)))
}
0
Joe C 31 ene. 2016 a las 01:38

Que este trabajo para usted?

pop <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(290,300,29,30,50,55))
gas <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(3.10,1.80,4.50,2.50,4.50,2.50))
cars <- data.frame(country=c("US","US","CA","CA","FR","FR"),year=c(1,2,1,2,1,2),value=c(2.1,2.2,1.8,1.9,1.3,1.3))


attachCodes <- function(dframe)
{
  df <- dframe
  df$ccode <- countrycode(df$country,"iso2c","cown")
  df$id <- (df$ccode*10000)+df$year
  return(df)
}

tablesList <- list(pop,gas,cars)
tablesList <- lapply(tablesList,attachCodes)
0
Paweł Sopel 30 ene. 2016 a las 00:06