Создание нового набора данных путем нахождения совпадения в 2 других наборах данных в R - PullRequest
0 голосов
/ 29 июня 2011

Я пытался быть ясным, но извиняюсь, если это не достаточно ясно ... У меня есть два набора данных различной длины. В наборе данных 1 для col1 = x, col2 = y

набор данных 1 =

col1  col2
0.1   0.21
0.1   0.22
0.2   0.4
0.34  0.3
0.4   0.36

Точно так же в наборе данных 2 для col3 = x, col4 = y

col3  col4
0.1   0.2
0.2   0.3
0.3   0.4
0.4   0.5
0.5   0.6
0.6   0.7
0.7   0.8

Некоторые значения в col1 и col3 совпадают, поэтому я хотел бы создать новый набор данных, в который будут записаны все значения, найденные в col1 (все значения, найденные в col3, но не col1, игнорируются), но с их «совпадающим» номером в col4 такой, что

new_col1 new_col4
0.1      0.2
0.1      0.2
0.2      0.3
0.34     NA
0.3      0.4

Не могли бы вы объяснить, как я могу это сделать? Спасибо.

1 Ответ

2 голосов
/ 29 июня 2011

Использовать merge:

dat1 <- data.frame(col1=c(0.1,0.1,0.2,0.34,0.4),col2=c(0.21,0.22,0.4,0.3,0.36))
dat2 <- data.frame(col3=(1:7)/10,col4=(2:8)/10)

> merge(dat1, dat2, by.x="col1", by.y="col3", all.x=TRUE)[-2]
  col1 col4
1 0.10  0.2
2 0.10  0.2
3 0.20  0.3
4 0.34   NA
5 0.40  0.5

Параметры by указывают, с какими столбцами сопоставляться, all.x=TRUE указывает использовать все первые данные, а окончательное поднабор [-2]удалить col2 из вывода.

Редактировать:

Для дополнительного требования используйте dat2$col3 <- trunc(dat2$col3*10)/10 до слияния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...