Столбец таблицы данных R sum с несколькими условиями if - PullRequest
0 голосов
/ 14 мая 2018

У меня есть приведенная ниже таблица данных в R:

      n       s     b  y
1 a 1Q 1990 Rank1 10
2 a 2Q 1990 Rank1 43
3 b 1Q 1991 Rank2 42
4 b 3Q 2000 Rank3 66
5 a 4Q 1991 Rank1 55
6 c 1Q 2005 rank3 44

Я хочу суммировать столбец y на основе значений остальных столбцов.Например, в столбце n значение «a», в столбце s значение «Rank1».Предостережение в том, что я хочу суммировать все числа для каждого квартала после начального, а не для других, например, до него.за 1 квартал 1990 года я хочу добавить все остальные цифры за кварталы после 1 квартала 1990 года до 1 квартала 2005 года, за 2 квартал 1990 года я хочу добавить все цифры до 1 квартала 2005 года, но не 1 кв. 1990 года.

Таким образом, окончательный результат долженбыть примерно таким:

n       s     b   y
1 a 1Q 1990 Rank1 108
2 a 2Q 1990 Rank1  98
3 b 1Q 1991 Rank2  42
4 b 3Q 2000 Rank3  66
5 a 4Q 1991 Rank1  55
6 c 1Q 2005 rank3  44

Я даже не знаю, как начать строить это.

Каждая помощь очень ценится.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вот решение с data.table:

library("data.table")
DT <- fread(
"n       s     b  y
a 1Q.1990 Rank1 10
a 2Q.1990 Rank1 43
b 1Q.1991 Rank2 42
b 3Q.2000 Rank3 66
a 4Q.1991 Rank1 55
c 1Q.2005 rank3 44")
DT[, ysum:=rev(cumsum(rev(y))), by=.(n, b)][]
# > DT[, ysum:=rev(cumsum(rev(y))), by=.(n, b)][]
#    n       s     b  y ysum
# 1: a 1Q.1990 Rank1 10  108
# 2: a 2Q.1990 Rank1 43   98
# 3: b 1Q.1991 Rank2 42   42
# 4: b 3Q.2000 Rank3 66   66
# 5: a 4Q.1991 Rank1 55   55
# 6: c 1Q.2005 rank3 44   44

С базой R вы можете сделать:

DT$ysum2 <- ave(DT$y, DT$n, DT$b, FUN=function(x) rev(cumsum(rev(x))))
0 голосов
/ 14 мая 2018

Вы можете использовать пакет "sqldf" для выполнения SQL-запросов на вашем фрейме данных.Прежде чем сделать это, разбейте составной столбец «а» на отдельные значения, чтобы вам было проще с ними справиться.

https://www.rdocumentation.org/packages/sqldf/versions/0.4-11

https://cran.r -project.org/web/packages/sqldf/sqldf.pdf

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