[英]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
仅突出显示X
和Z
列值相同但 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
:首先按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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.