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的名称来创建子集
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