R List&数据帧格式

时间:2014-06-06 14:51:12

标签: 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,我需要实际更改列表中的元素,以便我可以重新保存数据文件并在以后使用它。到目前为止我所拥有的是:

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语句中有引号的原因。为什么这不会改变数据,我怎样才能改变它?

1 个答案:

答案 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
}}