Продолжение на этот вопрос: Add row in R dataframe by unique factor in column showing percent change by MonthУпорядочивание списка по элементу в списке и удалить указанные строки в списке
testing <- data.frame(
MONTH = c("MTD: 12", "MTD: 12", "MTD: 11", "MTD: 12", "MTD: 12", "MTD: 12"),
YEAR = c(2012, 2013, 2014, 2015, 2013, 2014),
Client = c("A.", "A.", "A.", "B.", "B.", "B."),
Revenue = c(320, 205, 166L, 152, 150, 138),
Col1 = c(651, 485, 533, 3932, 171, 436),
Col2 = c(478, 335, 305, 238, 115, 251),
Col3 = c(73, 69, 57, 6, 67, 57),
Col4 = c(6.7, 6.1, 5.5, 6.4, 13.1, 5.5)
)
# subset just the month=12 rows
test12 <- testing[testing$MONTH=="MTD: 12", ]
test12 <- test12[order(test12$Client, test12$YEAR), ]
# define a function to calculate percent change
pctchange <- function(x) {
L <- length(x)
c(NA, 100 * (x[-1] - x[-L])/x[-L])
}
# calculate percent change for all columns, by client
change <- apply(test12[, c("Revenue", "Col1", "Col2", "Col3", "Col4")], 2,
function(y) unlist(tapply(y, test12$Client, pctchange)))
change <- data.frame(change)
names(change) <- paste0("d", names(change))
test12b <- cbind(test12[, c("MONTH", "YEAR", "Client")], change)
# merge back with monthly data
merge(testing, test12b, all=TRUE)
Таким образом, после выполнения этого кода вы получите список, который был расщепляется клиентом.
Я хочу запустить следующий код, который будет по существу удалить 2-ю строку, если число строк для этого фактора (клиент) больше чем 2.
Я попытался это уже и не работает:
testing<-ifelse(length(splitresult)>2,splitresult[-2,],splitresult)
Конечная цель из всего этого:
1) для того, чтобы просто получить процентное изменение в прошлом году с предыдущим годом и не показывают Inbetween вещи, как NA за предыдущий год. Но если это новый клиент, я хочу, чтобы NA там указывал, что это новый клиент. Вот почему я пробовал код выше, который не работал.
2) Я хочу, чтобы изменить порядок клиентов в расколе по доходам в МПД: 12 2014.
splitlist[order(sapply(splitlist, function(x) (x[["Revenue"]])))]
(Не работает: предположим splitlist это имя списка)
Если любой может помочь мне с любым вопросом, это было бы очень полезно. Благодаря!
Вы пытались использовать пакет 'dplyr'? – Jubbles
У меня нет. Я думаю, мне нужно использовать sapply для второй части вопроса, но не уверен, как это сделать с месяц/год. Я отредактировал вопрос, чтобы показать вам, что я пробовал @Jubbles –