我有以下name_total = matrix(nrow = 51, ncol=3, NA)
,其中每一行对应一个州(51为哥伦比亚特区)。第一列是一个给出状态名称的字符串(例如:name_total[1,1]= "Alabama"
)。
第二个和第三个是来自人口普查的CSV文件的网址,分别将县与州参议院区和县与州府区连接起来。
阿拉巴马州:
name_total[1,2] ="http://www2.census.gov/geo/relfiles/cdsld13/01/co_lu_delim_01.txt"
name_total[1,3] ="http://www2.census.gov/geo/relfiles/cdsld13/01/co_ll_delim_01.txt"
我希望最终输出一个表格,基本上是所有50个州+ DC及其各自的县并连接参议院和众议院地区。我不知道这是否非常清楚所以这里有一个例子:
[,1] [,2] [,3] [,4]
[1,] "Alabama" "countyX1" "Senate District Y1" "House District Z1"
[2,] "Alabama" "countyX2" "Senate District Y2" "House District Z2"
[3,] "Alabama" "countyX3" "Senate District Y3" "House District Z3"
[4,] "Alaska" "countyX4" "Senate District Y4" "House District Z4"
[5,] "Alaska" "countyX5" "Senate District Y4" "House District Z5"
我使用for
循环:
for (i in 1:51){
senate= name_total[i,2]
link_senate = url(senate)
house= name_total[i,3]
link_house = url(house)
state=name_total[i,1]
data_senate= read.csv2(link_senate,sep=",",header=TRUE, skip=1)
data_house= read.csv2(link_house,sep=",",header=TRUE, skip=1)
final=cbind(state, data_senate, data_house)
}
当然每个元素都有不同的行数,对于Alabama(i = 1)状态返回“Alabama”一次,其他元素分别返回3乘122和3乘207矩阵。我收到有关行数变化的错误消息。
我很确定其中一个问题是cbind
函数的使用,但我不知道如何使用它来获得更好的结果。
答案 0 :(得分:0)
如果其他人有类似的问题,我找到了一种方法来获得我想分别为州参议院和州议会提出的要求。首先,一些国家只有两个国家,而俄勒冈州的联系也在下降。我个人从原始数据中取出它们。
然后我在循环之外初始化了第一个状态:
senate = url(name_total[1,2])
data_senate= read.csv2(senate,sep=",",header=TRUE, skip=1)
assign(paste("Base_senate_",name_total[1,1],sep=""),data_senate)
A = assign(paste("Base_senate_",name_total[1,1],sep=""),data_senate)
house= url(name_total[1,3])
data_house= read.csv2(house,sep=",",header=TRUE, skip=1)
assign(paste("Base_house_",name_total[1,1],sep=""),data_house)
B = assign(paste("Base_house_",name_total[1,1],sep=""),data_house)
然后我使用for
循环:
for (i in 2:48){
senate = url(name_total[i,2])
house= url(name_total[i,3])
data_senate= read.csv2(senate,sep=",",header=TRUE, skip=1)
assign(paste("Base_senate_",name_total[i,1],sep=""),data_senate)
names(data_senate)[2] = "County"
A = rbind(A,assign(paste("Base_senate_",name_total[i,1],sep=""),data_senate))
data_house= read.csv2(house,sep=",",header=TRUE, skip=1)
assign(paste("Base_house_",name_total[i,1],sep=""),data_house)
names(data_house)[2] = "County"
B = rbind(B,assign(paste("Base_house_",name_total[i,1],sep=""),data_house))
}
A和B为您提供了预期的表(没有State的字符串名称,但第一个变量标识了状态)。
我不得不使用names(data_senate)[2] = "County"
因为第二列对某些州有不同的名称。
希望它有所帮助!