группировка / подсчет / сопоставление данных в R - PullRequest
0 голосов
/ 30 августа 2018

У меня большой набор данных, содержащий несколько столбцов с разными значениями. Посмотрите ниже:

X             Y         Z
20:00:00     AAA    ABC123*
20:00:00     BBB    ABC123*
21:00:00     AAA    AEC173
23:00:00     CCC    ABE124
20:00:00     DDD    ABC123*

и так далее ...

Столбец X содержит время, Y - трехбуквенный код, а Z - буквенно-цифровой код. Я бы хотел, чтобы R выделил мне только случаи, когда значения столбцов X и Z совпадают, но значение Y отличается. В таком случае будут первые два столбца, отмеченные звездочкой, а также последний.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Использование sqldf: сначала сгруппируйте данные по X и Z, а затем выберите X,Y и distinct(Y) следующим образом:

library(sqldf)
sqldf("select X,Z,count(distinct Y)>1 as count from df group by X,Z")

Outout (Если счетчик равен 1, это означает, что значения столбцов X и Z одинаковы, но значение Y отличается):

     X          Z     count
  1 20:00:00  ABC123     1
  2 21:00:00  AEC173     0
  3 23:00:00  ABE124     0
0 голосов
/ 30 августа 2018

Вы можете начать с группировки X и Z, а затем подсчитать частоту n() каждой группы, затем пометить частоты с n()>1 и иметь Y, которая является полностью уникальной среди них.

 library(dplyr)
 df %>% group_by(X,Z) %>% 
        mutate(Flag = ifelse(n()>1 & length(unique(Y))==n(),1,0))

# A tibble: 5 x 4
# Groups:   X, Z [3]
  X        Y     Z       Flag
  <fct>    <fct> <fct>  <dbl>
1 20:00:00 AAA   ABC123     1
2 20:00:00 BBB   ABC123     1
3 21:00:00 AAA   AEC173     0
4 23:00:00 CCC   ABE124     0
5 20:00:00 DDD   ABC123     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...