我想将数据集分成两个框架 - 一个原始数据集基于条件具有重复观察,另一个原始数据集基于条件没有重复观察。在下面的例子中,我想将框架分成一个只有一个编码器用于观察的框架和一个有两个编码器的框架::
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
为此,我想制作,以便:
frame1:
id coder y
1 1 A 4
2 1 A 5
3 1 B 4
4 2 A 1
5 2 B 1
frame2:
6 3 A 2
答案 0 :(得分:1)
您可以使用aggregate
确定每个数据框中需要的ID:
cts <- aggregate(coder~id, frame, function(x) length(unique(x)))
cts
# id coder
# 1 1 2
# 2 2 2
# 3 3 1
然后你可以根据这个来适当地进行分组:
subset(frame, id %in% cts$id[cts$coder >= 2])
# id coder y
# 1 1 A 4
# 2 1 A 5
# 3 1 B 4
# 4 2 A 1
# 5 2 B 1
subset(frame, id %in% cts$id[cts$coder < 2])
# id coder y
# 6 3 A 2
答案 1 :(得分:0)
您也可以尝试:
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
!table(frame$coder, frame$id)
。 执行上述colSums
,结果
# 1 2 3
# 0 0 1
ids
的索引并对TRUE