我正在研究R中的数据集,其中WO可以具有值“K”和“B”。我希望返回WO,其中每个WO的频率在“K”和“B”记录之间不匹配。例如下表:
PropertySourcesPlaceholderConfigurer
我希望返回917595,因为3不等于6.但是,应该返回1011033,因为它的频率匹配。
答案 0 :(得分:0)
重新整形数据让您对频率值进行比较。
library(dplyr)
library(reshape2)
dframe <-
"WO,Invoice,freq
917595,B,3
917595,K,6
1011033,B,2
1011033,K,2" %>%
read.csv(text = .,
stringsAsFactors = FALSE)
dcast(dframe,
WO ~ Invoice,
value.var = "freq") %>%
filter(B != K)
答案 1 :(得分:0)
我们可以使用base R
duplicated
合作完成
df1[!(duplicated(df1[c(1, 3)])|duplicated(df1[c(1,3)], fromLast = TRUE)),]
# WO Invoice freq
#1 917595 B 3
#2 917595 K 6
或另一种选择是按'WO'进行分组,然后检查if
'freq'中unique
个元素的数量是否大于1
library(data.table)
setDT(df1)[, if(uniqueN(freq)>1) .SD, WO]
# WO Invoice freq
#1: 917595 B 3
#2: 917595 K 6