所以我有一个列表作为.rda文件。列表中有51个元素,对应于状态缩写,即“ca”,“fl”等。每个状态都有state.in和state.out元素。例如,有一长串迁移数据可以作为data_9495$ca$state.in
和另一个名为data_9495$ca$state.out
的人员访问。为了使这个巨大的数据文件与其他东西一致,我需要在数据文件中每个状态的state.in和state.out元素中更改一些值。数据文件名为data_9495
,我需要实际更改列表中的元素,以便我可以重新保存数据文件并在以后使用它。到目前为止我所拥有的是:
datafile<-"data_9495"
datafile<-gsub("\\.rda$","",datafile)
loaded_data <- load(paste("/Users/blah/blah/Listed Data/", datafile, ".rda", sep=""))
d<-get(loaded_data[1])
require("UScensus2010")
data(countyfips)
states<-unique(countyfips[,4])
for(k in 1:length(states)){
state<-states[k]
print(k)
state.in<-as.data.frame(d[[which(names(d)==tolower(state))]][1])
state.out<-as.data.frame(d[[which(names(d)==tolower(state))]][2])
{for(j in 1:dim(state.in)[1])
{
if(state.in[j,3]=="63"&&state.in[j,4]=="050")
{state.in[j,3]<-state.in[j,1]
state.in[j,4]<-state.in[j,2]}
}
for(i in 1:dim(state.out)[1])
{
if(state.out[i,3]=="63"&& state.out[i,4]=="050")
{state.out[i,3]<-state.out[i,1]
state.out[i,4]<-state.out[i,2]}
}
assign(d[[which(names(d)==tolower(state))]][1],state.in)
assign(d[[which(names(d)==tolower(state))]][2],state.out)
}}
可以在以下位置下载.rda文件:(点击顶部标有“data 9495.rda”的带下划线的内容) http://speedy.sh/vr7JQ/data-9495.rda
代码将“运行”但实际上似乎并没有改变我需要更改的值。请注意,列类确实是字符,这就是我的for循环if语句中有引号的原因。为什么这不会改变数据,我怎样才能改变它?
答案 0 :(得分:1)
好吧,assign
不是必需的,无论如何都是错误的语法(第二个参数应该是一个字符向量。
尝试使用此语法
for(k in 1:length(states)){
state<-states[k]
print(k)
state.in <- d[[which(names(d)==tolower(state))]][["state.in"]]
state.out <- d[[which(names(d)==tolower(state))]][["state.out"]]
...
d[[which(names(d)==tolower(state))]][["state.in"]] <- state.in
d[[which(names(d)==tolower(state))]][["state.out"]] <- state.out
}}