2016-01-29 31 views
0

非常感谢您的建议。我正在尝试在循环中的多个对象上创建一个新变量。这些新变量由函数生成。R:重新编码跨多个对象的变量

例如,我有三套国家一级的数据:

# 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)) 

我想创建一个新的变量,被称为“COUNTRYCODE”,在COUNTRYCODE包使用COUNTRYCODE()命令。

谨以此执行对单个对象的操作:

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

但我有一个大量的对象。我希望能通过一个循环做到这一点,像这样

# 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 
} 

但是,这是行不通的。我一直试图这样做assign()在循环和apply(),但我太密集不能让我的脑袋周围如何使这项工作在我的情况。

如果有人能够给我提供一个如何用我自己的数据类型来做这件事的例子,我会非常感激。

回答

0

特别感谢@Pawel提供解决问题所需的缺失信息。解决方案是:

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

这会帮你吗?

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

感谢您的帮助。我很感激帮助。问题是,当您对50个更大的数据表执行此操作时,** tablesList **会变得非常不便。我真的不知道该怎么办。有没有办法改变原来的物体**流行**,**气**,**汽车**? –