我有一个大型数据集,其中包含几列不同的值。在下面看看:
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值不同的情况。这种情况是前两列标有星号,最后一列。
答案 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
:首先按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 (如果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