Вычитание одного кадра данных из другого - программирование
Подтвердить что ты не робот

Вычитание одного кадра данных из другого

Предположим, что у меня есть больший кадр данных и меньше. Если меньший находится внутри большего, как я могу:

Больше - меньше

Пример:

Малый фрейм данных:

     ID       CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1
203079_BA_M     10       11       14         16      -9        -9
203079_BA_F      8       12       14         17      -9        -9
203080_BA_M     10       12       13         13      -9        -9

Большой кадр данных:

      ID      CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1
203078_MG_M     -9       -9       15         15      18        20
203078_MG_F     -9       -9       14         15      17        19
203079_BA_M     10       11       14         16      -9        -9
203079_BA_F      8       12       14         17      -9        -9
203080_BA_M     10       12       13         13      -9        -9
203080_BA_F     10       11       14         16      -9        -9
203081_MG_M     10       12       14         16      -9        -9
203081_MG_F     11       12       15         16      -9        -9
203082_MG_M     11       11       13         15      -9        -9
203082_MG_F     11       11       13         14      -9        -9

Малый кадр данных соответствует строкам 3, 4 и 5 большего кадра данных.

Спасибо!

4b9b3361

Ответ 1

Попробуйте следующее:

BigDF[ !(BigDF$ID %in% SmallDF$ID), ]

Ответ 2

В dplyr:

library(dplyr)

setdiff(BigDF, SmallDF)

Дополнительная информация: Hadley dply cheatsheet: https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

Краткое описание функций операций с примерами http://rpackages.ianhowson.com/cran/dplyr/man/setops.html (Но все Грамматика манипулирования данными - отличный ресурс)

И хотя ниже не находится прямой ответ на ваш вопрос - он часто связан для меня (и был очень полезным)

Если вы хотите зафиксировать новые изменения, произошедшие между новым фреймворком данных и предыдущей версией одного и того же блока данных (внутри тех же записей), вы захотите сделать свой код следующим:

setdiff(NewDF, OldDF)