извините, из-за загадочного названия я не нашел лучшего резюме по моей проблеме. Итак, вот моя проблема: у меня есть датафрейм и я хочу создать diff()
для групп, что работает нормально:
df <- data.frame (name = rep(c("a", "b", "c"), 4),
index = rep(c("c1", "c2"), each=6),
year = rep(c(2008:2010),4),
value = rep(1:3, each=4))
head(df)
name index year value
1 a c1 2008 1
2 b c1 2009 1
3 c c1 2010 1
ddply(df, .(name, year), summarize, value=diff(value))
Однако я хотел бы включить index
в свой результат, который я пытался сделать с:
ddply(df, .(name, year), summarize, value=diff(value), index=index)
Все же это приводит к сообщению об ошибке:
length(rows) == 1 is not TRUE
Что я и думаю, потому что в индексе больше строк, потому что он не обработан diff
. Есть ли быстрое решение моей проблемы?
Большое спасибо!
EDIT
Я пытаюсь уточнить свой вопрос, что я хочу добавить к результату:
Предположим, переменная index
выше. Это фактор, который должен что-то объяснять. Тем не менее, я не могу взять diff()
этого, что не имело бы смысла, поэтому я просто хочу пропустить это, не меняя ничего. Я попытался drop==FALSE
, который привел к тому же сообщению об ошибке.
Извините за все это замешательство! Вот очень простой пример:
name year index value
a 2008 c1 10
a 2009 c2 30
a 2010 c1 40
после взятия группы acroos diff 'a' это выглядит так:
name year index d.value
a 2009 c2 +20 #c2 stayed the same just the first row got intentionally dropped.
a 2010 c1 +10
считают несчастное имя index
чем-то вроде атрибута: оно может меняться годами, но не имеет смысла принимать diff()
Я действительно очень надеюсь, что это даст вам подсказку, чего я хочу - если нет, я удалю вопрос, потому что я нашел нелегкий обходной путь;) и извините за все неудобства!