0

我有一个包含 28441 个邮政编码的数据框,这是数据框中的唯一列。我想把它变成 28 行,每行有 1000 个邮政编码,一个有 441 个邮政编码:

我在 R 语言中尝试了以下内容:

zip.codes<-read.csv('E:/My Docments/zip_codes.csv', header= TRUE, fill=TRUE           
quote="\"", na.strings='NS', stringsAsFactors=FALSE)

for (i in 1:length(zip.codes)) {
 for(j in 1:1000) {
        new.zip.codes[j,i]<-zip.codes[i,j]
 }
}

I get the following error:
Error in new.zip.codes[j, i] <- zip,codes[i, j] : 
incorrect number of subscripts on matrix

每个邮政编码都是唯一的,不会重复。

我错过了什么?感谢您的帮助。

罗伯特

4

2 回答 2

2

我假设你想这样做一次。如果您有许多不同长度的邮政编码列表,则需要对其进行一些修改。

Zip<-seq(1:28441)        #fake zip codes for example
Zip[28842:29000]<-NA     #pads the zip codes to fit nicely in matrix
Zipmat<-matrix(data=Zip,nrow=29, ncol=100) #now in a 29 row by 100 column matrix

matrix() 命令的帮助有几个您可能会觉得有用的选项(dimnames、byrow)。

于 2013-08-14T01:58:03.947 回答
0

不知道这是用什么语言编码的,但我想我理解你的问题。如果您的原件都在 zip.codes 的第一列(我假设这是旧数据框),那么您想要 [i,1] 表示第 i 行,第一列。你的 j 应该从 1 到

for (i in 1:length(zip.codes)) {
  k = i % 1000
  for(j in 1:1000) {
    new.zip.codes[k,j]<-zip.codes[i,1]
  }
}

使用 % 作为运算符,您可以选择所需的行号,将 j 作为列控件。当您知道您的固定表大小时,这非常有用。

希望这可以帮助。

于 2013-08-13T18:30:15.293 回答