查找对应于多个值的因素
Finding factors that correspond to more than one values
假设有以下数据框:
x=data.frame(c(1,1,2,2,2,3),c("A","A","B","B","B","B"))
names(x)=c("v1","v2")
x
v1 v2
1 1 A
2 1 A
3 2 B
4 2 B
5 2 B
6 3 B
在此数据框中,v1
中的值我想对应到 v2
中的标签。但是,正如在此示例中所见,B
具有多个对应值。
是否有任何优雅快速的方法来查找 v2
中的哪些标签对应于 v1
中的多个值?
我想要理想地显示的结果,值 - 在我们的示例中应该是 c(2,3)
- 以及行号 - 在我们的示例中应该是 r=c(5,6)
。
假设我们想要 'v1' 中唯一元素的索引按 'v2' 分组并且应该有多个唯一元素,我们创建一个逻辑索引 ave
和用它来对 'x'.
的行进行子集化
i1 <- with(x, ave(v1, v2, FUN = function(x)
length(unique(x))>1 & !duplicated(x, fromLast=TRUE)))!=0
x[i1,]
# v1 v2
#5 2 B
#6 3 B
或者更快的选择是 data.table
library(data.table)
i1 <- setDT(x)[, .I[uniqueN(v1)>1 & !duplicated(v1, fromLast=TRUE)], v2]$V1
x[i1, 'v1', with = FALSE][, rn := i1][]
# v1 rn
#1: 2 5
#2: 3 6
假设有以下数据框:
x=data.frame(c(1,1,2,2,2,3),c("A","A","B","B","B","B"))
names(x)=c("v1","v2")
x
v1 v2
1 1 A
2 1 A
3 2 B
4 2 B
5 2 B
6 3 B
在此数据框中,v1
中的值我想对应到 v2
中的标签。但是,正如在此示例中所见,B
具有多个对应值。
是否有任何优雅快速的方法来查找 v2
中的哪些标签对应于 v1
中的多个值?
我想要理想地显示的结果,值 - 在我们的示例中应该是 c(2,3)
- 以及行号 - 在我们的示例中应该是 r=c(5,6)
。
假设我们想要 'v1' 中唯一元素的索引按 'v2' 分组并且应该有多个唯一元素,我们创建一个逻辑索引 ave
和用它来对 'x'.
i1 <- with(x, ave(v1, v2, FUN = function(x)
length(unique(x))>1 & !duplicated(x, fromLast=TRUE)))!=0
x[i1,]
# v1 v2
#5 2 B
#6 3 B
或者更快的选择是 data.table
library(data.table)
i1 <- setDT(x)[, .I[uniqueN(v1)>1 & !duplicated(v1, fromLast=TRUE)], v2]$V1
x[i1, 'v1', with = FALSE][, rn := i1][]
# v1 rn
#1: 2 5
#2: 3 6