如何从数据框的两列中找出唯一的字段值

6

我有一个包含多列的数据框,其中包括QuarterCustomerID。在这个数据框中,我想要确定QuarterCustomerID的唯一组合。

例如:

masterdf <- read.csv(text = "
    Quarter,  CustomerID, ProductID
    2009 Q1,    1234,     1
    2009 Q1,    1234,     2
    2009 Q2,    1324,     3
    2009 Q3,    1234,     4
    2009 Q3,    1234,     5
    2009 Q3,    8764,     6
    2009 Q4,    5432,     7")

What i want is:

FilterQuarter     UniqueCustomerID
2009 Q1           1234
2009 Q2           1324
2009 Q3           8764
2009 Q3           1234
2009 Q4           5432

如何在R中实现这一点?我尝试了unique函数,但它没有按照我的要求工作。

看起来他想要唯一的 (Quarter, CustomerID) 对。然而,不清楚他想如何将这个新数据与可能维度不同的数据框进行列绑定。 - Ben Sidhom
我已经编辑了这里,2009年第一季度和2009年第三季度都有客户ID 1234,所以如果我使用唯一函数,它只会计算一次,但我希望它应该同时出现在2009年第一季度和2009年第三季度。谢谢您的快速回复。 - snehal
我尝试的是unique(masterdf$Quarter,masterdf$Customer.Id),输出结果为: [1] "2009 Q1" "2009 Q2" "2011 Q1" "2010 Q2" "2010 Q4" "2012 Q1" "2009 Q3" [8] "2010 Q1" "2011 Q3" "2009 Q4" "2010 Q3" "2011 Q4" "2011 Q2" "2012 Q2" [15] "NA QNA"。 - snehal
unique(masterdf) 是什么意思? - mnel
当我尝试以上命令时,出现了重复(my.df[c("FilterQuarter", "UniqueCustomerID")]),错误提示为在 [.data.frame(my.df, c("FilterQuarter", "UniqueCustomerID")) : 选择的列未定义。 - snehal
显示剩余8条评论
2个回答

10

原帖下的长篇评论让人难以跟随。正如@RomanLustrik所指出的,您需要寻找duplicated。使用它来像这样对您的原始data.frame 进行子集划分...

masterdf[ ! duplicated( masterdf[ c("Quarter" , "CustomerID") ] ) , ]
#  Quarter CustomerID
#1 2009 Q1       1234
#3 2009 Q2       1324
#4 2009 Q3       1234
#6 2009 Q3       8764
#7 2009 Q4       5432

谢谢你,借助于你的命令 @SimonO101,我得到了我想要的输出。 - snehal
@user2492230 没问题,很高兴我们能解决这个问题! - Simon O'Hanlon

2
另一种简单的方法是使用R中的SQL查询,请查看下面的代码。这假设masterdf是原始文件的名称...
library(sqldf)
sqldf("select Quarter, CustomerID from masterdf group by 1,2")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接