Реорганизация R-кадра данных - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть несколько десятилетий данных дважды в день со следующей структурой

str(Raw.Data)
'data.frame':   709400 obs. of  7 variables:
 $ V1: int  254 1 2 3 9 4 4 4 4 4 ...
 $ V2: Factor w/ 448 levels "0","100","1000",..: 1 40 11 448 286 4 24 23 20 17 ...
 $ V3: Factor w/ 18039 levels "","-1","-10",..: 99 15749 6714 18039 13326 4244 4221 12375 14708 16000 ...
 $ V4: Factor w/ 3509 levels "","-1","-10",..: 3503 3034 3496 1 2176 3496 1219 2878 33 149 ...
 $ V5: Factor w/ 1295 levels "","-1","-10",..: 1092 1273 1019 1 992 1295 1254 40 187 192 ...
 $ V6: int  NA 353 99999 NA 230 99999 163 202 238 262 ...
 $ V7: int  NA 99999 0 NA 40 99999 50 40 70 60 ...

В формате, подобном электронной таблице, первый день данных выглядит следующим образом:

254 0   1   JUN 1957    NA  NA
1   94823   72520   40.50N  80.22W  353 99999
2   2000    2000    99999   13  99999   0
3   PIT ms          NA  NA
9   9780    353 234 105 230 40
4   10000   157 99999   99999   99999   99999
4   8500    1566    143 64  163 50
4   7000    3168    34  -133    202 40
4   5000    5815    -127    -266    238 70
4   4000    7483    -231    -270    262 60
4   3000    9517    -414    99999   258 150
4   2500    10726   -530    99999   260 170
4   2000    12128   -638    99999   271 230
254 12  1   JUN 1957    NA  NA
1   94823   72520   40.50N  80.22W  353 99999
2   1000    1500    1690    15  7   0
3   PIT ms          NA  NA
9   9770    353 168 113 135 40
4   10000   153 99999   99999   99999   99999
4   8500    1537    119 89  216 80
4   7000    3133    16  4   221 70
4   5000    5779    -132    -182    249 90
4   4000    7444    -240    -314    262 90
4   3000    9469    -414    99999   272 120
4   2500    10682   -511    99999   289 130
4   2000    12097   -608    99999   291 150
4   1500    13868   -630    99999   291 160
4   1000    16400   -611    99999   298 110

Я хочу реорганизовать данные так, чтобы первый день данных был сокращен до:

0   1   JUN 1957    9780    353 234 105 230 40
12  1   JUN 1957    9770    353 168 113 135 40

Для этого мне нужны ячейки 2: 5 для строк, начинающихся с «254» и ячейки 2: 7 для строк, начинающихся с «9».

Я разработал следующий код, но он даже не прошел первый оператор if в первой итерации цикла for. Может быть, это проблема с типом данных или индексацией?

leng <- dim(Raw.Data)[1]
Processed.Data <- as.data.frame(matrix(0,ncol = 10, nrow = 42000))
i <- 1:leng
count <- 1
for (i in 1:leng){
  if(Raw.for.R[i,1]==254){
    Surface.Obs[count,1:4]<-Raw.for.R[i,2:5]
  } else if(Raw.or.R$V1[i,1]==9){
    Surface.Obs[count,5:10]<-Raw.for.R[i,2:7]
  }
  count <- count +1
}

Когда код запускается, я получаю следующие предупреждающие сообщения:

1: In if (Raw.Data[i, 1] == 254) { :
  the condition has length > 1 and only the first element will be used
2: In `[<-.data.frame`(`*tmp*`, count, 1:4, value = list(V2 = c(1L,  :
  replacement element 1 has 709400 rows to replace 1 rows
3: In `[<-.data.frame`(`*tmp*`, count, 1:4, value = list(V2 = c(1L,  :
  replacement element 2 has 709400 rows to replace 1 rows
4: In `[<-.data.frame`(`*tmp*`, count, 1:4, value = list(V2 = c(1L,  :
  replacement element 3 has 709400 rows to replace 1 rows
5: In `[<-.data.frame`(`*tmp*`, count, 1:4, value = list(V2 = c(1L,  :
  replacement element 4 has 709400 rows to replace 1 rows
6: In `[<-.factor`(`*tmp*`, iseq, value = 99L) :
  invalid factor level, NA generated
7: In `[<-.factor`(`*tmp*`, iseq, value = 3503L) :
  invalid factor level, NA generated
8: In `[<-.factor`(`*tmp*`, iseq, value = 1092L) :
  invalid factor level, NA generated

Любая помощь в решении только одной из моих многочисленных проблем будет принята с благодарностью!

P.S. Если у вас есть идеи, как вставить пустые строки для пропущенных дат, это может сэкономить мне дополнительный вопрос позже.

Спасибо!
Evan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...