2015-08-11 4 views
-3

Моего набора данных содержит следующее переменные:Пролитых данные по средним точкам

id = i.d. 
rept = repeatition number 
class = class type (constant per id) 
x0 = initial points 
x1 = middle point 
x2 = final point 


id <- c(0,0,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3) 
rept <- c(1,2,3,1,2,3,4,5, 1,2,3,4,1,2,3,4,5,6) 
class <- c("a","a","a","n","n","n","n","n","a","a","a","a","w","w","w","w","w","w") 
x0 <- c(0,0,0,0,0,0,0,0,1,1,1,1,5,5,5,5,5,5) 
x1 <- c(.3,.3,.3,1.52,1.52,1.52,1.52,1.52,3.75,3.75,3.75,3.75, 4.55,4.55,4.55,4.55,4.55,4.55) 
x2 <- c(2,2,2,6,6,6,6,6,4,4,4,4,6,6,6,6,6,6) 

alldata <- data.frame(id,rept,class,x0,x1,x2) 

, который выглядит как

id rept class x0 x1 x2 
1 0 1  a 0 0.30 2 
2 0 2  a 0 0.30 2 
3 0 3  a 0 0.30 2 
4 1 1  n 0 1.52 6 
5 1 2  n 0 1.52 6 
6 1 3  n 0 1.52 6 
7 1 4  n 0 1.52 6 
8 1 5  n 0 1.52 6 
9 2 1  a 1 3.75 4 
10 2 2  a 1 3.75 4 
11 2 3  a 1 3.75 4 
12 2 4  a 1 3.75 4 
13 3 1  w 5 4.55 6 
14 3 2  w 5 4.55 6 
15 3 3  w 5 4.55 6 
16 3 4  w 5 4.55 6 
17 3 5  w 5 4.55 6 
18 3 6  w 5 4.55 6 

Я хочу, чтобы разделить данные по средней точке. Например,

для ID = 0, мы имеем x0 = 0, x1 = 0,3, и x2 = 2

то данные будут разделены следующим образом:

0 0.3 
0.3 1 
1 2 

Кроме того, мне нужно для определения индикатора z = 0 перед расщеплением и z = 1 после расщепления. Переменная «class» является постоянной в i.d. и хотел бы сохранить его в новых наборах данных

Окончательный набор данных:

id class y0 y1 z 
1 0  a 0.00 0.30 0 
2 0  a 0.30 1.00 1 
3 0  a 1.00 2.00 1 
4 1  n 0.00 1.00 0 
5 1  n 1.00 1.52 0 
6 1  n 1.52 2.00 1 
7 1  n 2.00 3.00 1 
8 1  n 3.00 4.00 1 
9 1  n 4.00 5.00 1 
10 2  a 1.00 2.00 0 
11 2  a 2.00 3.00 0 
12 2  a 3.00 3.75 0 
13 2  a 3.75 4.00 1 
14 3  w 1.00 2.00 0 
15 3  w 2.00 3.00 0 
16 3  w 3.00 4.00 0 
17 3  w 4.00 4.55 0 
18 3  w 4.55 5.00 1 
19 3  w 5.00 6.00 1 

где у0 в intial точки, и y1 является конечной точкой. перевод

+1

Наверху у вас есть 'x1 = средняя точка', что означает, что она всегда находится посередине. Однако в ваших данных примера id 3 имеет 'x0 = 5',' x1 = 4.55' и 'x3 = 6'. Итак, в чем смысл «x1 = средняя точка» вверху, если «x1» не является постоянной срединной точкой? – Gregor

+0

Кроме того, возможно, это только я, но когда вы говорите: «данные будут разбиты следующим образом:», я не понимаю вообще, что следует. В чем смысл строк и столбцов в следующей матрице 3x2? – Gregor

+0

@Gregor 1) существуют разные средние точки для каждого уникального идентификатора, но аналогичные для id, и 2) матрица 3 * 2 является просто разделом для id = 0. – user9292

ответ

1

Ора от входа до выхода не прописан вообще, но это работает:

library(data.table) 
DT <- data.table(alldata) 
DT[, { 
    x <- sort(c(x1[1], seq(from = min(x0[1],rept[1]), to = min(x2[1],rept[.N])))) 
    list(y0 = head(x,-1), y1 = tail(x,-1), z = cumsum(head(x,-1)==x1[1])) 
}, by=.(id,class)] 

который дает

id class y0 y1 z 
1: 0  a 0.00 0.30 0 
2: 0  a 0.30 1.00 1 
3: 0  a 1.00 2.00 1 
4: 1  n 0.00 1.00 0 
5: 1  n 1.00 1.52 0 
6: 1  n 1.52 2.00 1 
7: 1  n 2.00 3.00 1 
8: 1  n 3.00 4.00 1 
9: 1  n 4.00 5.00 1 
10: 2  a 1.00 2.00 0 
11: 2  a 2.00 3.00 0 
12: 2  a 3.00 3.75 0 
13: 2  a 3.75 4.00 1 
14: 3  w 1.00 2.00 0 
15: 3  w 2.00 3.00 0 
16: 3  w 3.00 4.00 0 
17: 3  w 4.00 4.55 0 
18: 3  w 4.55 5.00 1 
19: 3  w 5.00 6.00 1 

Это очень понятно, как это может быть сделано без данных .table.

Смежные вопросы