【发布时间】:2017-09-06 08:38:04
【问题描述】:
我正在尝试从数据框/矩阵中找出与其他一些值/类不同的值。
即这里是一个示例初始表:
P | V
------ | ------
par | 123
par | 1234
par | 12345
par | 123456
pat | 123
pat | 1234
pat | 12345
pat | 1234567
pay | 123456
pay | 789
pay | 967
如您所见,有一些值(V 列)是唯一的,并且 P 列的一些值是不同的。这些值是
P | V
------ | ------
pat | 1234567
pay | 789
pay | 967
这是预期的输出。
为此,我使用了聚合函数(见下文)),但实际数据会大得多。它们可以达到 2-3 百万行,甚至更多。
您认为下面的代码是否能够正常工作并响应如此多的数据,还是有其他方法可以提高效率?
mat = c("par","par","par","par","pat","pat","pat","pat","pay","pay","pay")
mat = as.data.frame(cbind("P"=mat, "V"=c("123","1234","12345","123456","123","1234","12345","1234567","123456","789","967")))
uniquePs = matrix(unique(mat$P))
diff = aggregate(P~V, mat, FUN=unique)
distinctVs = diff[which( grepl(":|," , as.character(diff$P) ) == FALSE ),]
distinctVs$P = uniquePs[as.numeric(distinctVs$P)]
谢谢。
【问题讨论】:
-
你的意思是
lengths(diff$P)>1而不是grepl -
是的。这也可以工作