Я пытался сделать условную сумму на основе data.frame
с дубликатами. Я хочу суммировать те, у которых есть идентичная пермо и дата, и создать отдельный столбец с этой информацией, заполняющей NA или предпочтительные 0.Условная сумма на data.frame на основе дубликатов
Мой набор данных выглядит следующим образом:
data.frame(crsp)
permno date PAYDT DISTCD divamt FACPR FACSHR PRC RET
1 10022 19280929 19281001 1272 0.25 0 0 71.00 0.045208
2 10022 19280929 19281001 1232 1.00 0 0 71.00 0.045208
3 10022 19281031 NA NA NA NA NA 73.50 0.035211
4 10022 19281130 NA NA NA NA NA 72.50 -0.013605
5 10022 19281231 19290202 1232 1.00 0 0 68.00 -0.044828
6 10022 19281231 19290202 1272 0.25 0 0 68.00 -0.044828
7 10022 19290131 NA NA NA NA NA 73.75 0.084559
8 10022 19290228 NA NA NA NA NA 69.00 -0.064407
9 10022 19290328 19290401 1232 1.00 0 0 65.00 -0.039855
10 10022 19290328 19290401 1272 0.25 0 0 65.00 -0.039855
11 10022 19290430 NA NA NA NA NA 67.00 0.030769
12 10022 19290531 NA NA NA NA NA 64.75 -0.033582
Во-первых, я создал permno + дата, чтобы сделать уникальный пикап-код
crsp$permnodate = paste(as.character(crsp$permno),as.character(crsp$date),sep="")
Во-вторых, я тогда попытался подвести дублированные и превращение этого в новую раму:
crsp_divsingl <- aggregate(crsp$divamt, by = list(permnodate = crsp$permnodate), FUN = sum, na.rm = TRUE)
Однако я не могу правильно передать эту информацию к оригиналу data.frame(crsp)
, так как столбцы имеют разные длины, где cbind
и cbind.fill
не позволяют мне правильно соответствовать. В частности, я хочу получить сумму divamts для одного/первого из уникальных пермодатов, чтобы он соответствовал оставшимся data.frame
в длину. Я также не получил merge
или match
.
Я еще не пробовал функции цикла или удалось создать любые функции if
или ifelse
с последовательностью. В принципе, это можно сделать в excel с помощью формулы VLOOKUP или index.match, однако это более сложно в R, чем я сначала думал.
Помощь очень ценится.
С наилучшими пожеланиями
Troels
Для этого вы можете использовать 'duplicated'. Я пишу ответ ниже, но один вопрос, когда вы говорите: «Создайте отдельный столбец с этой информацией, заполняющей NA или предпочтительные 0». Вы имеете в виду, что хотите преобразовать значения NA в данные в 0? – giraffehere
Привет, благодарю вас за комментарий! Я использую функцию 'duplicated' для создания отдельного' data.frame' только для отдельных цен (другая часть набора данных, которую я пытаюсь реплицировать). Итак, потому что существует несколько перестановок, и я хочу иметь одну сумму для этих дубликатов, другие строки в новом столбце, где дубликаты, должны переносить либо то же значение, что и первое permnodate, либо, альтернативно, быть 0 или NA. В противном случае отдельный столбец будет иметь разную длину, чем другие столбцы на листе. Надеюсь, это имеет смысл. Я попробую ваш ответ ниже. Благодаря! –
Хороший материал. Дайте мне знать, с чем я могу помочь. – giraffehere