2013-06-03 1 views
2

У меня есть простой вопрос, но я не могу найти ответ на stackoverflow. Возможно, я использую неправильные условия поиска. В любом случае это мой вопрос:R: Как добавить столбец в фреймворк данных, причем в каждой строке суммарная сумма всех предыдущих строк?

Я хочу добавить столбец в dataframe, в каждой строке - суммарную сумму всех предыдущих строк. Например, у меня есть dataframe X со столбцами V1 и V2. В этом случае V3 в примере добавленный столбец, я хочу создать:

X =

V1 V2 V3 
1 0.5 0.5 
2 2.0 2.5 
3 1.9 4.4 
4 0.0 4.4 
5 5.1 9.5 

Фактический кадр данных, на которых я хочу, чтобы применить это на самом деле намного больше (5000 строк). Советы или решения кто-нибудь? Было бы замечательно!

+3

Так в поисках 'кумулятивного sum' и' r' не приведет вас к 'cumsum'? – joran

+0

Протестировано в моем google, и кажется, что это первый хит. +1 joran :-) –

ответ

1

Функция cumsum() сделает трюк, но так как вы хотите ее на нескольких столбцах, вам нужно сначала получить сумму по строкам. Это можно сделать с помощью функции apply(). Предполагая, что я понимаю, что вы ищете, вот пример:

> set.seed(2) 
> dat <- data.frame(a=round(rnorm(10),2),b=round(rnorm(10),2),c=round(rnorm(10),2)) 
> dat$cumsum <- cumsum(apply(dat,1,sum)) 
> dat 
     a  b  c cumsum 
1 -0.90 0.42 2.09 1.61 
2 0.18 0.98 -1.20 1.57 
3 1.59 -0.39 1.59 4.36 
4 -1.13 -1.04 1.95 4.14 
5 -0.08 1.78 0.00 5.84 
6 0.13 -2.31 -2.45 1.21 
7 0.71 0.88 0.48 3.28 
8 -0.24 0.04 -0.60 2.48 
9 1.98 1.01 0.79 6.26 
10 -0.14 0.43 0.29 6.84 
+0

Его сумма находится только над столбцом 'V2'. –

+0

Тогда я неправильно читаю вопрос, и его вопрос не должен был быть задан в первую очередь. Нет сомнений, что многие примеры применения cumsum() для одной переменной. – David

+2

Если ваша интерпретация была правильной, которая (как представляется, не является), скорее всего, будет просто использовать 'cumsum (rowSums (dat))'. –

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