我很难理解duplicated()。
首先,钻石数据集中是否存在重复是否正确? 其次,考虑到我使用重复数据删除的数据集,熔化的data.table中的重复项来自哪里?
library(data.table)
library(reshape2)
library(ggplot2)
data(diamonds)
# duplicates in data.frame
dups.df = nrow(diamonds[duplicated(diamonds),]) # 146 records
diamonds.dedup = unique(diamonds)
dt = as.data.table(diamonds.dedup)
d = melt(dt, value.var = "cut")
dups.d = d[duplicated(d),]
nrow(dups.d) # 232821 records
答案 0 :(得分:2)
不使用54K行数据集可以帮助您找出正在发生的事情。 E.g:
test <- data.frame(a=c(1,1,2,2),b=c(1,1,4,4),vals1=c(2,2,3,4),vals2=3:6)
test <- test[c(1:4,4),] # make it have a duplicated row
test <- unique(test) # now get rid of it just to prove a point
# a b vals1 vals2
#1 1 1 2 3
#2 1 1 2 4
#3 2 4 3 5
#4 2 4 4 6
现在将此数据融化为您的工作方式:
melt(id=c("a","b"),data=test)
# a b variable value
#1 1 1 vals1 2
#2 1 1 vals1 2 ## duplicate!
#3 2 4 vals1 3
#4 2 4 vals1 4
#5 1 1 vals2 3
#6 1 1 vals2 4
#7 2 4 vals2 5
#8 2 4 vals2 6
惊喜,现在你有了重复
您以前在a/b
和vals1/vals2
的idvars中查找完全相同的行,现在您只需匹配id
个变量和value
对应的vals1
{1}}。
答案 1 :(得分:1)
如果用最初的钻石套装替换最后一行代码
dt = as.data.table(diamonds)
d = melt(dt, value.var = "cut")
dups.d = d[duplicated(d),]
nrow(dups.d) # 233843 records
您将看到重复记录的数量(233843
而不是232821
)高于重复数据删除集。想想duplicated
如何在融化的数据表上工作!