R 没有重复的清除器观察结果

R 没有重复的清除器观察结果,r,dataset,duplicates,R,Dataset,Duplicates,我想将一个数据集分为两个帧—一个是原始数据集基于条件具有重复观测值的帧,另一个是原始数据集不具有基于条件的重复观测值的帧。在下面的示例中,我想将帧分为一个观察只有一个编码器的帧和一个观察有两个编码器的帧: frame <- data.frame(id = c(1,1,1,2,2,3), coder = c("A", "A", "B", "A", "B", "A"), y = c(4,5,4,1,1,2)) frame 您可以使用aggregate确定每个数据帧中需要的ID: cts &l

我想将一个数据集分为两个帧—一个是原始数据集基于条件具有重复观测值的帧,另一个是原始数据集不具有基于条件的重复观测值的帧。在下面的示例中,我想将帧分为一个观察只有一个编码器的帧和一个观察有两个编码器的帧:

frame <- data.frame(id = c(1,1,1,2,2,3), coder = c("A", "A", "B", "A", "B", "A"), y = c(4,5,4,1,1,2))
frame

您可以使用
aggregate
确定每个数据帧中需要的ID:

cts <- aggregate(coder~id, frame, function(x) length(unique(x)))
cts
#   id coder
# 1  1     2
# 2  2     2
# 3  3     1
cts=2])
#id编码器y
#1 A 4
#2 1 A 5
#3 1 B 4
#4 2 A 1
#5 2 B 1
子集(帧,id%在%cts$id[cts$coder<2]中)
#id编码器y
#6 3 A 2
您也可以尝试:

 indx <- !colSums(!table(frame$coder, frame$id))
 frame[frame$id %in% names(indx)[indx],]
#   id coder y
#1  1     A 4
#2  1     A 5
#3  1     B 4
#4  2     A 1
#5  2     B 1

 frame[frame$id %in% names(indx)[!indx],]
#  id coder y
#6  3     A 2
  • 如果我们否定这一点,结果将是一个逻辑索引
  • !表(帧$coder,帧$id)
  • 执行上面的
    colSums
    ,结果如下

    # 1 2 3 
    # 0 0 1 
    
  • 再次求反并获取
    id
    的索引,并将那些
    TRUE
  • 在此基础上,您可以通过匹配ID的名称来创建子集

嗨,我不确定你到底在问什么。是否要拆分data.frames,一个有重复项,一个没有?您考虑通过以下方式消除重复:整行、特定列或列的组合?
 indx <- !colSums(!table(frame$coder, frame$id))
 frame[frame$id %in% names(indx)[indx],]
#   id coder y
#1  1     A 4
#2  1     A 5
#3  1     B 4
#4  2     A 1
#5  2     B 1

 frame[frame$id %in% names(indx)[!indx],]
#  id coder y
#6  3     A 2
 table(frame$coder, frame$id) 
  #    1 2 3
  #  A 2 1 1
  #  B 1 1 0 #Here for id 3, B==0
# 1 2 3 
# 0 0 1