Нахождение ближайших значений в группе mutil

#r #group-by

Вопрос:

Мои данные 1 являются

id1 значение 1
1 98
1 101
1 118
1 170
2 95
2 201
3 160
4 70

Мои данные 2 являются

id2 значение 2
1 100
1 120
2 105
2 200
3 300

как я могу использовать group_by или mutate (dplyr) для создания столбца результатов из data2$value2 ? Таблица результатов, подобная этой

id1 значение 1 значение 2
1 98 100
1 101 100
1 118 100
1 170 120
2 95 105
2 201 200
3 160 300
4 70 NA

Ответ №1:

Это не dplyr решение. Но data.table подвижные соединения имхо-лучшая практика для подобных задач.

 library(data.table) data1 lt;- fread("id1 value1 1 98 1 101 1 118 1 170 2 95 2 201 3 160 4 70") data2 lt;- fread("id2 value2 1 100 1 120 2 105 2 200 3 300")  # alternatively, use: # setDT(data1); setDT(data2)  # perform rolling join to nearest value with same id data1[, value2 := data2[data1, x.value2, on = .(id2 = id1, value2 = value1), roll = "nearest"]][] # id1 value1 value2 # 1: 1 98 100 # 2: 1 101 100 # 3: 1 118 120 # 4: 1 170 120 # 5: 2 95 105 # 6: 2 201 200 # 7: 3 160 300 # 8: 4 70 NA    

Комментарии:

1. Это работает идеально! но я адаптировал ваш код в своих других данных и получил сообщение об ошибке msg : Error: Check that is.data.table(DT) == TRUE. Otherwise, := and := (...) are defined for use in j, once only and in particular ways. See help(":="). Что не так? Моя версия R Studio 1.4.1106 данные.таблица комплектация версии 1.14.3 R версия 4.0.5

2. Являются ли ваши данные таблицей данных?

3. Ах, я забыл установить его на свои данные, теперь он хорошо работает, большое спасибо.! ps. Я новичок в data.frame packgage 🙂 .