![](/img/trans.png)
[英]Extracting rows from a data frame depending on the combination of values in two colums
[英]extracting unique combination rows from a data frame in R
我有一个数据框,给出了同一个州提供的人的成对相关性。 我给出了一个关于我希望如何处理这些数据的小例子,但是现在我的实际数据集有成对相关的1500万行和更多的附加列。
以下是示例数据:
>sample_data
Pair_1ID Pair_2ID CORR
1 2 0.12
1 3 0.23
2 1 0.12
2 3 0.75
3 1 0.23
3 2 0.75
我想生成一个没有重复的新数据帧,例如在第1行中,人1和2之间的相关性是0.12。 第1行与第3行相同,它显示了2和1之间的相关性。由于它们具有相同的信息,我希望最终文件没有重复,我想要一个类似下面的文件:
>output
Pair_1ID Pair_2ID CORR
1 2 0.12
1 3 0.23
2 3 0.75
有人可以帮忙吗? 独特的命令不适用于此,我不知道该怎么做。
假设每个组合出现两次:
subset(sample_data , Pair_1ID <= Pair_2ID)
如果不:
unique(transform(sample_data, Pair_1ID = pmin(Pair_1ID, Pair_2ID),
Pair_2ID = pmax(Pair_1ID, Pair_2ID)))
编辑 :关于最后一个,包括unique
CORR
因为可能的浮点问题不是一个好主意。 我也看到你提到你有更多的专栏。 因此,最好将比较限制为两个ID:
relabeled <- transform(sample_data, Pair_1ID = pmin(Pair_1ID, Pair_2ID),
Pair_2ID = pmax(Pair_1ID, Pair_2ID))
subset(relabeled, !duplicated(cbind(Pair_1ID, Pair_2ID)))
flodel的答案真的很棒。 我只是想在没有查看实际值的情况下添加基于索引的另一种解决方案。 它仅在所有组合都存在且数据框由第一列第一列和第二列第二列(如示例中)排序时有效。
maxVal <- max(sample_data$Pair_1ID)
shrtIdx <- logical(maxVal)
idx <- sapply(seq(maxVal - 1, 1), function(x) replace(shrtIdx, seq(x), TRUE))
sample_data[idx,]
# Pair_1ID Pair_2ID CORR
# 1 1 2 0.12
# 2 1 3 0.23
# 4 2 3 0.75
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.