我想基于逻辑测试对数据集进行子集化。
我的数据如下:
A B
1 2
3 4
5 7
2 1
基本上,我想做的是将数据集分为两个子数据集,其中一个将包含所有观察值,对于给定的行,存在反向组合。因此,所需的输出如下所示:
data1
A B
1 2
2 1
第二:
data2
3 4
5 7
我知道subset()
函数可以进行逻辑测试,但我只是不知道如何在R中设置这一功能。
答案 0 :(得分:3)
您可以找到重复的行索引,然后根据该索引来子集:
MySortedData <- data.frame(t(apply(df,1,sort)))
# X1 X2
# 1 1 2
# 2 3 4
# 3 5 7
# 4 1 2
MyDuplicates <- duplicated(MySortedData) | duplicated(MySortedData, fromLast=TRUE)
# [1] TRUE FALSE FALSE TRUE
MySubset2 <- df[!MyDuplicates,]
# A B
# 2 3 4
# 3 5 7
MySubset1 <- df[MyDuplicates,]
# A B
# 1 1 2
# 4 2 1