2015-10-12 1 views
1

У меня есть следующая проблема. У меня есть data.frame с й и у колонки, представляющая несколько точек в пространстве:Двойной, последовательный выбор строк, начинающийся с разных строк в R

X<-c(18.25743,18.25783,18.25823,18.25850,18.25863,18.25878, 
18.25885,18.25912,18.25943,18.25962,18.25978,18.26000, 
18.26022,18.26051,18.26070,18.26095,18.26118,18.26140, 
18.26189,18.26250,18.26310,18.26390) 

Y<-c(44.69561,44.69564,44.69567,44.69567,44.69586, 
44.69600,44.69637,44.69671,44.69691,44.69701,44.69720, 
44.69740,44.69763,44.69774,44.69787,44.69790,44.69791, 
44.69795,44.69812,44.69802,44.69812,44.69834) 

eDF<-data.frame(X,Y) 

Теперь моя проблема они «сортируются» неправильно plotting.So то, что мне нужно, это функция, чтобы писать вместе строки из двух точек, которые принадлежат вместе (в списке списков):

1 и 12 ID1

2 и 13 ID2

3 и 14 ID3

...

11 и 22 является ID11

Каждого так создается список в списке списков должны иметь свой уникальный идентификатор (только нумерующий от 1 до конца). Хорошо, потому что я получил эту проблему во всех моих данных разной длины.

Было бы здорово, если бы начальная точка выбора второй последовательной строки (12) была гибкой, всегда принимая первую строку после половины данных. ((Rownumber/2) +1) в этом примере 12. Ну, я пробовал кое-что, и я думаю, что Im на правильном пути, но я не могу найти решение самостоятельно.

Эта функция довольно близко, но я не могу управлять, чтобы сделать его запуска в разных строках (1 и 12):

lapply(2:nrow(eDF), function(x) eDF[(x-1):x,]) 

Я также попытался выяснить это с SEQ и он будет делать то, что мне нужно, если я мог составить список списков, подключив оба примера кода. Ну, мне также нужно изменить конкретные начальные и конечные числа на динамическое решение.

eDF[(seq(1,to=11,by=1)),] # selecting rows 1 to 11 
eDF[(seq(12,to=nrow(eDF),by=1)),] #selecting rows 12 to end 

У вас есть идеи?

+0

Измените данные. –

+0

Ну, я открываю все решения, которые работают для разных data.frames. –

ответ

1

Я не знаю, если вам был нужен столбец ID внутри нового списка, но другой путь будет:

#create the IDs 
eDF$ID <- rep(1:11,2) 
#split the data.frame according to those 
mylist <- split(eDF, eDF$ID) 

Выход:

mylist 
$`1` 
      X  Y ID 
1 18.25743 44.69561 1 
12 18.26000 44.69740 1 

$`2` 
      X  Y ID 
2 18.25783 44.69564 2 
13 18.26022 44.69763 2 

$`3` 
      X  Y ID 
3 18.25823 44.69567 3 
14 18.26051 44.69774 3 

$`4` 
     X  Y ID 
4 18.2585 44.69567 4 
15 18.2607 44.69787 4 
#and so on... 

Вы можете сделать только split(eDF, rep(1:11,2), если вам не нужен столбец ID.

1

Мы можем изменить lapply код в OP в

lapply(1:11, function(i) eDF[c(i, i+11),])