Как создать подмножество из data.frame, сравнив столбец со столбцом из другого data.frame? - PullRequest
0 голосов
/ 27 сентября 2018

Данные1 - это кадр данных из 1 столбца, который имеет уникальные номера (вид первичных ключей).

Данные2 - это кадр данных, который имеет 11 столбцов.Последний столбец содержит уникальные номера (первичные ключи).

Я хочу создать подмножество Data2 с каждой строкой, которая имеет те же уникальные номера (первичные ключи в столбце 11), что и в Data1.Я пытался с помощью какой функции:

data2_new <- which(data2[,11]== data1[,1])

Но это выдает ошибку:

Error in Ops.factor: level sets of factors are different. 

Пожалуйста, направьте меня

Ответы [ 2 ]

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

Предположим, у вас есть кадр данных № 1 (с вашим первичным ключом)

df1 <- data.frame(primary_key = c(1, 3, 5, 6, 8))

> df1
  primary_key
1           1
2           3
3           5
4           6
5           8

и

df2 <- data.frame(
  col_11 = c(0:9),
  letter = c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"), 
  value = c(1, 1, 3, 1, 2, 1, 3, 4, 5, 2))
> df2
   col_11 letter value
1       0      A     1
2       1      A     1
3       2      A     3
4       3      A     1
5       4      A     2
6       5      B     1
7       6      B     3
8       7      B     4
9       8      B     5
10      9      B     2

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

df2 %>% # the data you want to subset
  semi_join(df1, by = c("col_11" = #the name of your "sort of primary key" column in dataframe2
                          "primary_key")) # the name of your column in dataframe 1

       col_11 letter value
    1      1      A     1
    2      3      A     1
    3      5      B     1
    4      6      B     3
    5      8      B     5

Если имена ключей совпадают, вы можете просто сделать.

df2 %>% # the data you want to subset
  semi_join(df1, by = "primary_key")

semi_join помогает подмножеству df2.

0 голосов
/ 27 сентября 2018
data<-data2[data2$keys==data1$keys,]

В качестве альтернативы, вы можете просто сделать left_join:

data<-dplyr::left_join(data1, data2, by="keys")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...