2015-10-09 4 views
3

У меня есть очень простой вопрос, поскольку я относительно новичок в R. Мне было интересно, как добавить значение в столбце к предыдущему значению и повторить прямо вниз столбец из 1000 значения? Заметьте, я не хочу иметь суммарную сумму, и поэтому функция cumsum бесполезна. Скажем, мой столбец называется WD, я хочу добавить WD1 в WD2, WD2 в WD3, WD3 в WD4 и т. Д. Вплоть до конца и вывести эти суммы в виде нового столбца. Есть ли простой способ? Большое спасибо.Добавить значение строки в значение предыдущей строки в R

пригодных для воспроизведения Примера:

set.seed(111) 
df1 <- data.frame(WD=sample(10)) 

#result 
df1 
    WD new 
1 6 6 
2 7 13 
3 3 10 
4 4 7 
5 8 12 
6 10 18 
7 1 11 
8 2 3 
9 9 11 
10 5 14 

ответ

3

Добавит текущую строку (WD[-nrow(df1)]) со следующей строкой (WD[-1L]) и конкатенацию с первым элементом, чтобы создать столбец.

df1$newColumn <- with(df1, c(WD[1],WD[-1]+WD[-nrow(df1)])) 
+1

Большое спасибо akrun - очень простое решение, которое работает отлично. Я очень ценю вашу помощь! –

+0

@ DJ-AFC Нет проблем. Рад узнать, что это вам помогло. – akrun

2

Другой вариант, используя lag() из dplyr:

library(dplyr) 
mutate(df1, new = WD + lag(WD, default = 0)) 

Или с помощью shift() из data.table:

library(data.table) 
setDT(df1)[, new := WD + shift(WD, fill = 0)] 

Примечание: Тип shift() по умолчанию является "отставание". Другое возможное значение - «ведущее».

Что дает:

# WD new 
#1 6 6 
#2 7 13 
#3 3 10 
#4 4 7 
#5 8 12 
#6 10 18 
#7 1 11 
#8 2 3 
#9 9 11 
#10 5 14 
Смежные вопросы