у меня ДФ вроде
ProjectID Dist
1 x
1 y
2 z
2 x
2 h
3 k
.... ....
Я хочу добавить третий столбец, чтобы у нас был увеличивающийся счетчик для каждого ProjectID:
ProjectID Dist counter
1 x 1
1 y 2
2 z 1
2 x 2
2 h 3
1 k 3
.... ....
Я просмотрел seq
rank
и пару других битов, особенно пытаясь понять, могу ли я использовать ddply
, чтобы помочь:
df$counter <- ddply(df,.(projectID), function(x).....? )
Думаю, я мог бы адаптировать этот ответ Как создать счетчик /нумерация по группе?, но предпочел бы что-то вроде ddply (я не могу найти эквивалент cumsum, но я думаю, что здесь тот же принцип: Создать возрастающую серию целых чисел по группе в Pandas). Это позволило бы мне индексировать вхождения в списке (и, например, объединить это).
ave
, т.е.df$counter <- with(df, ave(seq_along(ProjectID), ProjectID, FUN=seq_along))
, или компактная оболочка будетlibrary(splitstackshape);getanID(df, 'ProjectID')[]
или использоватьplyr
;ddply(df, .(ProjectID), mutate, counter=seq_along(Dist))
- person akrun   schedule 21.02.2015ProjectID
и создаем новый столбец в виде последовательностиDist
для каждой группы. Вам будет легко это сделать после того, как вы прочитаете страницы справки и попробуете несколько примеров. - person akrun   schedule 21.02.2015ave
я (думаю) сбиваю с толку - я получаю примерddply
(который также отлично работает, еще раз спасибо), но использованиеave
вместе сseq_along
я изо всех сил пытаюсь понять - person sjgknight   schedule 21.02.2015ave
вторым аргументом является группирующая переменная, т.е. `ave(x, ..., FUN = mean)`. Если вы посмотрите на описание `...: Группирующие переменные, обычно факторы, имеют одинаковую «длину», как 'х'.` . Вы также можете использоватьave(ProjectID, ProjectID, FUN=seq_along)
, но когда у вас есть столбцыcharacter/factor
, это приведет либо к ошибке, либо к получению символьных элементов в качестве вывода. - person akrun   schedule 21.02.2015