Преобразование данных в R - PullRequest
       40

Преобразование данных в R

3 голосов
/ 29 августа 2011

У меня есть таблица с 2 столбцами, и я хочу построить значения из второго столбца по отношению к сумме значений N в первом столбце в 5 строках, предшествующих текущей строке .

Как мне добиться этого преобразования в R без предварительной внешней обработки?

Пример:

Файл: data.csv

7,2
4,8
3,6
7,10
9,3
0,4
8,9
3,4
5,3
4,6

d = read.csv("data.csv", col.names=c("a","b"))
plot(??some_transform??(d$a), d$b)

some_transform должен привести к следующему столбцу:

7 = 7
7+4 = 11
7+4+3 = 14
7+4+3+7 = 21 # Up to this is optional, can start with row 5
7+4+3+7+9 = 30
4+3+7+9+0 = 23
3+7+9+0+8 = 27
7+9+0+8+3 = 27
9+0+8+3+5 = 25
0+8+3+5+4 = 20

Итак, ввод графика

7,2
11,8
14,6
21,10
30,3
23,4
27,9
27,4
25,3
20,6

Ответы [ 2 ]

4 голосов
/ 29 августа 2011

Функция встраивания соберет матрицу с увеличением лагов от вектора.Взгляните на:

 embed(DF[ , ], 5)

Так что, если предполагается начать работу с 5-й строки, вы можете использовать следующие результаты:

 apply(embed(DF[ , 1], 5), 1,sum)
 plot(apply(embed(DF[ , 1], 5), 1,sum) , DF[-(1:4), 2])

РЕДАКТИРОВАТЬ: с вашей измененной спецификацией,добавьте 4 нуля в начало аргумента вставки.Я отображаю результат использования этого подхода, чтобы было легче «визуализировать» результат этого расширения до первого аргумента встраивания:

> embed( c(0,0,0,0, DF[ ,1 ]), 5)
      [,1] [,2] [,3] [,4] [,5]
 [1,]   80    0    0    0    0
 [2,]   80   80    0    0    0
 [3,]   80   80   80    0    0
 [4,]   81   80   80   80    0
 [5,]   82   81   80   80   80
 [6,]   82   82   81   80   80
 [7,]   83   82   82   81   80
 [8,]   83   83   82   82   81
 [9,]   90   83   83   82   82
[10,]   90   90   83   83   82
[11,]   90   90   90   83   83
[12,]   84   90   90   90   83
[13,]   84   84   90   90   90
[14,]   85   84   84   90   90
[15,]   85   85   84   84   90

(Обычно с помощью встраивания (см. Выше) можно получить сокращенныймассив, но наш спрашивающий был готов принять феномен "ввода".)

apply(embed( c(0,0,0,0, DF[ ,1 ]), 5), 1,sum)
 plot( apply(embed( c(0,0,0,0, DF[ ,1 ]), 5), 1,sum), DF[, 2])
1 голос
/ 29 августа 2011

Вы можете запустить FIR-фильтр вдоль первого столбца, чтобы найти суммы:

table = transform(table, sum5_a = filter(a, rep(1, 5), sides=1))

Это довольно специфично для суммирования.

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