Подмножество кадра данных необычным отношением между столбцами - PullRequest
1 голос
/ 28 сентября 2011

Я хочу установить подкадр данных, который имеет столбец идентификатора (v1, все уникально) и столбец «связанного» идентификатора (v2).Ожидается, что v2 состоит в том, что он может содержать NA с, но там, где он есть, соответствующий элемент v1 не появляется в другом месте в v2.Кроме того, ожидается, что отношение между столбцами будет симметричным: там, где есть запись x, в v2 запись v1 этой строки y, отражается в другой строке, где v1 имеет x и v2 имеет y.Последний критерий заключается в том, что отношение не является рефлексивным: т.е.примеры данных для иллюстрации:

set.seed(1)
dfr <- data.frame(v1=letters,v2=rev(letters))
dfr[sample(26,10),2]<-NA
dfr[sample(26,5),2]<-sample(letters,5)


dfr
   v1   v2
1   a    z
2   b <NA>
3   c    x
4   d    w
5   e <NA>
6   f    u
7   g <NA>
8   h    s
9   i    i
10  j <NA>
11  k    p
12  l <NA>
13  m    f
14  n <NA>
15  o    l
16  p    k
17  q    j
18  r    e
19  s <NA>
20  t    g
21  u <NA>
22  v    e
23  w <NA>
24  x    q
25  y    x
26  z    a

Итак, строки 1, 2, 11, 14, 16 и 26 все соответствуют критериям, и я хочу определить остальные.

Я пыталсянекоторые решения, использующие match, но NA вызывают проблемы.Вероятно, это также основывается на том факте, что в этом случае v2 основан на rev(v1), тогда как более общее решение не может сделать это предположение.

1 Ответ

3 голосов
/ 28 сентября 2011

Если я правильно понимаю, вот пример:

> subset(dfr, (is.na(v2) & !(v1%in%dfr$v2)) | !is.na(v2) & paste(v1, v2) %in% paste(dfr$v2, dfr$v1))
   v1   v2
1   a    z
2   b <NA>
9   i    i
11  k    p
14  n <NA>
16  p    k
26  z    a

# or if v1 == v2 is not included:
> subset(dfr, (is.na(v2) & !(v1%in%dfr$v2)) | !is.na(v2) & (v1 != v2 & paste(v1, v2) %in% paste(dfr$v2, dfr$v1)))
   v1   v2
1   a    z
2   b <NA>
11  k    p
14  n <NA>
16  p    k
26  z    a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...