2012-04-10 2 views
1

이름 배열이 있고이 이름을 데이터 프레임의 열 이름으로 사용하고 싶지만 오류가 발생합니다. 나는 이것을 정확히 어떻게 수행 할 지 모르겠다. 그러나 이것은 내가 지금까지 가지고있는 것이다.데이터 프레임 열 이름 배열 값

windspeeds = data.frame() 
cities <- c("albuquerque_nm", "boston_ma", "charlotte_nc", "dallas_tx", "denver_co", "helena_mt", "louisville_ky", "pittsburgh_pa", "salt_lake_city_ut", "seattle_wa") 
for(i in 1:10){ 
    fastest <- read.delim(paste("http://www.itl.nist.gov/div898/winds/data/nondirectional/datasets/", cities[i], ".prn", sep=""), col.names=c("NULL", "fastest", "NULL", "NULL"), skip=4, header=F, sep="")$fastest 
    windspeeds$cities[i] = fastest 
} 
나는이 오류가 무엇입니까

: 나는 문자열이나 일정의 일부 유형의 배열을 변환해야

Error in `$<-.data.frame`(`*tmp*`, "cities", value = 59L) : 
replacement has 1 rows, data has 0 
In addition: Warning message: 
In windspeeds$cities[i] = fastest : 
number of items to replace is not a multiple of replacement length 

를?

+0

루프의 '데이터'개체는 무엇입니까? 아, 당신은 그것을 업데이트했습니다 ... – Ben

답변

3

귀하의 문제 중 하나는 쿼리가 각 도시에 대해 같은 수의 레코드를 반환하지 않는다는 것입니다 (면책 조항, 귀하의 데이터 또는 그 모양이 무엇인지 알지 못합니다).

x <- lapply(cities, function(x) 
    read.delim(paste("http://www.itl.nist.gov/div898/winds/data/nondirectional/datasets/", x, ".prn", sep=""), 
      col.names=c("NULL", "fastest", "NULL", "NULL"), skip=4, header=FALSE, sep="")$fastest 
      ) 

이 X는 이제 다음과 같습니다 :

> str(x) 
List of 10 
$ : int [1:46] 59 49 51 52 57 52 45 54 49 64 ... 
$ : int [1:42] 50 55 79 56 53 41 51 51 65 62 ... 
$ : int [1:29] 33 42 40 52 42 48 52 51 46 51 ... 
$ : int [1:32] 48 45 46 45 43 53 43 58 46 43 ... 
$ : int [1:33] 42 51 49 44 47 47 50 44 44 54 ... 
$ : int [1:48] 58 58 58 58 70 55 56 62 59 70 ... 
$ : int [1:39] 40 39 50 53 50 51 54 54 51 50 ... 
$ : int [1:18] 47 56 60 44 54 50 42 52 47 47 ... 
$ : int [1:46] 53 49 40 53 55 40 49 46 61 41 ... 
$ : int [1:10] 38 44 35 46 42 45 41 45 42 43 

그리고이 관계없이, 여기 아마 일을하기보다 "R 틱"방법 목록 개체로 데이터를 읽는 하나의 방법입니다 기술 통계 :

> do.call(rbind, lapply(x, summary)) 
     Min. 1st Qu. Median Mean 3rd Qu. Max. 
[1,] 45 49.50 53.0 55.02 57.00 85 
[2,] 41 49.25 54.5 56.26 60.75 85 
[3,] 33 39.00 42.0 44.86 51.00 65 
[4,] 39 45.75 48.0 49.16 51.50 67 
[5,] 42 44.00 48.0 48.67 51.00 61 
[6,] 42 49.00 55.0 54.04 58.00 71 
[7,] 38 43.50 49.0 48.74 52.50 66 
[8,] 39 45.00 47.0 48.44 53.50 60 
[9,] 40 45.25 49.0 50.41 54.00 69 
[10,] 35 41.25 42.5 42.10 44.75 46 

각 도시에 대한 기록의 같은 번호가 있어야하는지 여부를 알 수 있지만, 희망이 옳은 길을 당신을 얻을 것이다.

+0

팁 덕분에, 나는 R에서 너무 많이 프로그래밍하지 않았고 관습을 모릅니다. – trev9065

+0

@ trev9065 - 걱정할 필요가 없습니다! 누구나 어느 시점에서 배워야합니다. R은 다른 프로그래밍 언어와 분명히 다르다. 일단 R에서 생각하기 시작하면 상대적으로 적은 양의 코드로 얼마나 많은 일을 할 수 있는지 놀랄 것이다. – Chase

+0

행을 이름 짓고 도시와 일치시키는 방법이 있습니까? – trev9065