R: Разделить столбцы на различные вложенные столбцы в определенных выбранных точках / значениях - PullRequest
0 голосов
/ 10 февраля 2019

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

Чтобы прояснить ситуацию, мне нужно сделать что-то вроде:

# data frame 
df<- data.frame(cbind("l1"=c(1:20),"l2"=c(21:40)))
# sepration points
pts<- c(4, 11, 17)
# dividing into sub columns
gp1<-df$l1[1:pts[1]]   
gp2<-df$l1[pts[1]:pts[2]]
gp3<-df$l1[pts[2]:pts[3]]
gp4<-df$l1[pts[3]:20]
# combining
res<- list(gp1, gp2, gp3, gp4)

> res
[[1]]
[1] 1 2 3 4

[[2]]
[1]  4  5  6  7  8  9 10 11

[[3]]
[1] 11 12 13 14 15 16 17

[[4]]
[1] 17 18 19 20

Но без определения точек разделения по одной и без переупорядочения данных на основе значений.

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 10 февраля 2019

Мы можем использовать Map для создания последовательности.Объедините 1 перед 'pts' и nrow в конце 'pts' как два отдельных vector s, используйте это для создания последовательности индекса с Map и получения соответствующих значений столбца 'l1''df' на основе последовательности

Map(function(i, j) df$l1[i:j], c(1, pts), c(pts, nrow(df)))
#[[1]]
#[1] 1 2 3 4

#[[2]]
#[1]  4  5  6  7  8  9 10 11

#[[3]]
#[1] 11 12 13 14 15 16 17

#[[4]]
#[1] 17 18 19 20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...