列表到数据框并更改R中的某些值

时间:2014-06-06 13:17:47

标签: r list dataframe

所以我有一个列表作为.rda文件。列表中有51个元素,对应于州缩写,即" ca," " FL"每个州都有一个state.in和state.out元素。例如,有一长串迁移数据可以作为data_9495$ca$state.in和另一个名为data_9495$ca$state.out的人员访问。为了使这个巨大的数据文件与其他东西一致,我需要在数据文件中每个状态的state.in和state.out元素中更改一些值。数据文件名为data_9495,我需要实际更改列表中的元素,以便我可以重新保存数据文件并在以后使用它。我的想法是,它不一定"分配" state.in/state.out到列表,所以我尝试使用assign但是没有工作。到目前为止我所拥有的是:

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文件可以在以下位置下载:(点击带下划线的内容,&#34;数据9495.rda&#34;在顶部) http://speedy.sh/vr7JQ/data-9495.rda

代码将会&#34;运行&#34;但它似乎并没有真正改变我需要改变的值。请注意,列类确实是字符,这就是我的for循环if语句中有引号的原因。为什么这不会改变数据,我怎样才能改变它?

1 个答案:

答案 0 :(得分:0)

试试这个。

d<-loaded_data
require("UScensus2010")
data(countyfips)
states<-unique(countyfips[,4])

for (state in states) {
  print(state)
  include <- with(d[state][[1]],state.in[,3]=="63" & state.in[,4]=="050")
  d[state][[1]]$state.in[include,3:4] <- d[state][[1]]$state.in[include,1:2]
  include <- with(d[state][[1]],state.out[,3]=="63" & state.out[,4]=="050")
  d[state][[1]]$state.out[include,3:4] <- d[state][[1]]$state.out[include,1:2]
}