对R中的数据进行分组/计数/匹​​配

时间:2018-08-30 11:05:31

标签: r

我有一个大型数据集,其中包含几列不同的值。在下面看看:

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仅突出显示XZ列值相同但Y值不同的情况。这种情况是前两列标有星号,最后一列。

2 个答案:

答案 0 :(得分:1)

您可以先对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

答案 1 :(得分:0)

使用sqldf:首先按XZ对数据进行分组,然后按如下所示选择X,Ydistinct(Y)

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

Outout (如果count为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