Добавление итогового значения к фрейму данных большей длины - PullRequest
0 голосов
/ 08 мая 2020

У меня есть большой фрейм данных с несколькими случаями для каждой группы (ID). У меня также есть меньший фрейм данных, который содержит случай для каждой группы (ID). Мне нужно добавить описание из меньшего фрейма данных к каждому образцу из большего фрейма данных с тем же идентификатором.

Ниже приведен пример набора данных

ID <- c('ID1','ID1','ID2','ID2','ID2','ID3','ID3','ID3','ID3','ID4')
data <- c(1,2,6,2,4,3,8,9,6,2)
large.dataframe <- data.frame(ID, data)

    ID data
1  ID1    1
2  ID1    2
3  ID2    6
4  ID2    2
5  ID2    4
6  ID3    3
7  ID3    8
8  ID3    9
9  ID3    6
10 ID4    2

ID <- c('ID1','ID2','ID3','ID4')
description <- c('D','E','F','G')
small.dataframe <- data.frame(ID, description)

   ID description
1 ID1           D
2 ID2           E
3 ID3           F
4 ID4           G

Желаемый результат ниже:

    ID data description
1  ID1    1           D
2  ID1    2           D
3  ID2    6           E
4  ID2    2           E
5  ID2    4           E
6  ID3    3           F
7  ID3    8           F
8  ID3    9           F
9  ID3    6           F
10 ID4    2           G

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Это может быть задание для left_join.

left_join(large.dataframe, small.dataframe, by ="ID")

    ID data description
1  ID1    1           D
2  ID1    2           D
3  ID2    6           E
4  ID2    2           E
5  ID2    4           E
6  ID3    3           F
7  ID3    8           F
8  ID3    9           F
9  ID3    6           F
10 ID4    2           G

merge отображает тот же результат

merge(large.dataframe, small.dataframe, by = "ID")

    ID data description
1  ID1    1           D
2  ID1    2           D
3  ID2    6           E
4  ID2    2           E
5  ID2    4           E
6  ID3    3           F
7  ID3    8           F
8  ID3    9           F
9  ID3    6           F
10 ID4    2           G

И жестко закодировать его в базе R, используя match

large.dataframe$description <- 
  small.dataframe$description[match(large.dataframe$ID, small.dataframe$ID)]

large.dataframe

    ID data description
1  ID1    1           D
2  ID1    2           D
3  ID2    6           E
4  ID2    2           E
5  ID2    4           E
6  ID3    3           F
7  ID3    8           F
8  ID3    9           F
9  ID3    6           F
10 ID4    2           G
1 голос
/ 08 мая 2020

Вот подход data.table:

library(data.table)
setDT(large.dataframe)[small.dataframe, description := i.description, on = "ID"]


#      ID data description
#  1: ID1    1           D
#  2: ID1    2           D
#  3: ID2    6           E
#  4: ID2    2           E
#  5: ID2    4           E
#  6: ID3    3           F
#  7: ID3    8           F
#  8: ID3    9           F
#  9: ID3    6           F
# 10: ID4    2           G
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...