Условное удаление дубликатов на основе нескольких условий в R - PullRequest
0 голосов
/ 06 февраля 2020

Сейчас у меня гипотетически следующая таблица:

.1 .2 .3 .2 1 C .2 1 C .2 1 C .3 1 N .3 1 N .4 1 N .4 1 N .4 1 N .4 1 N

Мы хотим сохранить только те строки, которые содержат C для столбца 3, учитывая, что столбец 2 одинаковый И значения для столбца 1 различны. Это должно привести к следующей таблице:

.1 .2 .3 .2 1 C .2 1 C .2 1 C

Я уже посмотрел на следующие вопросы: Удалить дубликаты на основе условия 2-го столбца R, условно удалить дублирующиеся строки Условное удаление дубликатов в R

У вас есть идеи, как этого добиться?

Ответы [ 3 ]

1 голос
/ 06 февраля 2020

Я не уверен, что полностью понимаю, что вам нужно сделать, но вот попытка с простым оператором If, который проверяет дисперсию двух столбцов, т.е.

if (var(dd3$X1) != 0 & var(dd3$X2) == 0) { dd3 <- subset(dd3, X3 == 'C')}
dd3
#  X1 X2 X3
#1  2  1  C
#2  2  1  C
#3  2  1  C

где,

dput(dd3)
structure(list(X1 = c(2L, 2L, 2L, 3L, 3L, 4L, 4L, 4L, 4L), X2 = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), X3 = structure(c(1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("C", "N"), class = "factor")), class = "data.frame", row.names = c(NA, -9L))
0 голосов
/ 06 февраля 2020

Может быть, вы можете попробовать следующий базовый код R с ave, то есть

dfout <- subset(df,as.logical(ave(X3,X1,X2,FUN = function(v) v=="C")))

# > dfout
#    X1 X2 X3
# 1  2  1  C
# 2  2  1  C
# 3  2  1  C

ДАННЫЕ

df <- structure(list(X1 = c(2L, 2L, 2L, 3L, 3L, 4L, 4L, 4L, 4L), X2 = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), X3 = c("C", "C", "C", "N", "N", 
"N", "N", "N", "N")), row.names = c(NA, -9L), class = "data.frame")
0 голосов
/ 06 февраля 2020

Я не совсем понимаю, что вы имеете в виду под "учитывая, что столбец 2 одинаков". Вы можете использовать subset

subset(df, df$col3 == "C" & df$col1 != df$col2)

, где я использовал col1, col2 и col3 для заголовков

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