Совпадение наблюдений между двумя наборами данных по идентификатору - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю со следующими данными: http://people.stern.nyu.edu/wgreene/Econometrics/healthcare.csv

То, что я хочу сделать, - это научить мой алгоритм правильно предсказывать, выпадет ли человек в последующий период.

data1 <- subset(data, YEAR==1984)

data2 <- subset(data, YEAR==1985)

didtheydrop <- as.integer(data1$id)

didtheydrop <- lapply(didtheydrop, function(x) as.integer(ifelse(x==data2$id, 0, 1)))

Это создало большой список со значениями, которые я думаю, что я хотел, но я не уверен.В конце я хотел бы добавить эту переменную к данным 1984 года, а затем использовать ее для создания моей модели.

Что я могу сделать, чтобы обеспечить сравнение соответствующих значений?Длина списка не одинакова, и это также не тот случай, когда они отображаются в правильном порядке (т.е. респонденты 3-7 не отвечают в 1984 году, но они появляются в 1985 году)

1 Ответ

0 голосов
/ 20 февраля 2019

Предполагая, что data1 и data2 - это два фрейма данных (неясно, поскольку кажется, что вы извлекли их из оригинального более крупного отдельного фрейма данных, называемого data), я думаю, что лучше объединить их и работать с одним фреймом данных.То есть, если существует один больший кадр данных, не делайте его подмножеством, просто удалите ненужные столбцы;если data1 и data2 - два фрейма данных, объедините их и работайте только с одним фреймом данных.

Существует несколько способов сделать это в R.

Вам следует просмотреть функцию слияния, вызывающую ?merge в вашемконсоль и чтение описания функции.

По сути, чтобы объединить два кадра данных, вы должны сделать что-то вроде:

merge(data1, data2, by= columnID) #Where columnID is the name of the variable that identifies the ID. If it is different in data1 and data2 you can use by.x and by.y

Затем вы должны определить, хотите ли выобъединить все строки из обеих таблиц с параметрами all.x, all.y и all: все значения из data1, даже если в data2 не найдено совпадений, или все значения из data2, даже если в data1 не найдено ни одного совпадения, ни все значения независимо отесть ли соответствующий идентификатор в другой базе данных.

Слияние в базовом пакете с любой установкой R.

Вы также можете использовать пакет dplyr, который делает тип объединения дажеболее явно:

inner_join(data1, data2, by = "ID") left_join(data1, data2, by = "ID") right_join(data1, data2, by = "ID") full_join(data1, data2, by = "ID")

Это хорошая ссылка для dplyr join https://rpubs.com/williamsurles/293454

Надеюсь, это поможет

...