Найти первый экземпляр и скопировать в другой фрейм данных, используя R - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть датафрейм людей по имени - все они уникальные записи.У меня есть второй массив данных о платежах, которые некоторые из этих людей сделали с датой, когда эти платежи были сделаны.

Я пытаюсь сделать это, добавив в свой массив данных с уникальными именами дату, когда человек сделал свой первый платеж.
Ниже приведены некоторые примеры данных и код, который я использую

 Name   payment date
 Fred   01/01/2018
 Jim    01/01/2018
 Barney 01/01/2018
 Fred   01/03/2018
 John   01/02/2018
 Jim    01/03/2018
 Fred   01/04/2018
 John   01/04/2018
 Barney 01/02/2018
 Barney 01/03/2018
 Jim    01/05/2018
 Fred   01/06/2018

. В фрейме имен есть некоторые люди, которые не сделали платеж, поэтому, когда я делаю матч, я хочу вернуться«NA» для этого человека, поэтому таблица будет выглядеть следующим образом:

 Name   first payment
 Fred   01/01/2018
 Jim    01/01/2018
 Rodney NA
 Barney 01/01/2018
 John   01/02/2018

Я запустил следующий код, чтобы упорядочить фрейм данных платежей по дате платежа

payments<-payments[order(payments$paymentdate),]

ЗатемКод R, который я использую для поиска и сопоставления первого экземпляра по имени:

people$firstpayment<-payments[match
(people$Name,payments$Name,nomatch = 0,incomparables = NULL),c("paymentdate")]

терпит неудачу со следующим кодом ошибки R:

Error in `$<-.data.frame`(`*tmp*`, firstpayment, value = list(paymentdate = c15247,  : 
replacement has 10288 rows, data has 14610

Я предполагаю, что это нужно сделатьс невозможностью сопоставить NA, но я немного прочитал о функции «match» и подумал, что команда nomatch справится с этим.

Спасибо!

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете отфильтровать фрейм данных платежей (я назову его «second_dataframe»), чтобы иметь только первый платеж одним человеком, а затем объединить две таблицы по имени:

library(dplyr)

# Filter
second_dataframe <- second_dataframe %>% group_by(Name) %>% summarise(`first payment`=min(`payment date`))

#Merge
merge(first_dataframe, second_dataframe, by="Name", all=TRUE) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...