繁体   English   中英

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

[英]grouping/counting/matching data in 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 值不同的情况。 这种情况是前两列标有星号,也是最后一列。

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

使用sqldf :首先按XZ对数据进行分组,然后选择X,Ydistinct(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM