我有一个2380行的data.frame,如下所示:
> nstudentid1 nstudentid2 nstudentid3
1 80501010 80501010 80501010
2 80501022 80501022 80501022
3 80501005 80501005 80501005
4 80501003 80501003 80501003
5 80501026 80501026 80501026
6 80501025 80501025 80501025
正如您所看到的,变量是主题ID。 每个主题都有三个ID用于交叉验证。
通常我们希望在库存中找到重复的条目,我已经这样做了。
现在我想检查每个主题(行)是否在所有三个ID变量中都具有相同的ID号。
我进行了一般检查:
all(student1$nstudentid1 == student1$nstudentid2)
all(student1$nstudentid1 == student1$nstudentid3)
all(student1$nstudentid2 == student1$nstudentid3)
并且得到了FALSE作为答案。
如何找到不相同的行号?
任何建议都会有所帮助
答案 0 :(得分:1)
将您的条件用作过滤器:
condition <- student1$nstudentid1 == student1$nstudentid2 &
student1$nstudentid1 == student1$nstudentid3 &
student1$nstudentid2 == student1$nstudentid3;
nonIdenticalRows <- student1[!condition,]
要获得行号,请执行以下操作:
rowNumbers <- which(!condition)
答案 1 :(得分:1)
indx <- rowSums(student1==student1[,1])!=ncol(student1)
student1[indx,]
获取行号,
which(indx)
# named integer(0) #none of the rows meet the condition
在您的示例中,列是相同的,因此,如果我更改:
student1[3,3] <- 804015
indx <- rowSums(student1==student1[,1])!=ncol(student1)
student1[indx,]
#nstudentid1 nstudentid2 nstudentid3
#3 80501005 80501005 804015
student1==student1[,1]
检查数据集是否等于第一列。基本上,它正在做的是检查te第一列是否等于数据集的每一列。我们获得的输出是:
nstudentid1 nstudentid2 nstudentid3
1 TRUE TRUE TRUE
2 TRUE TRUE TRUE
3 TRUE TRUE TRUE
4 TRUE TRUE TRUE
5 TRUE TRUE TRUE
6 TRUE TRUE TRUE
假设我改变其中一个元素。 student1[3,3] <- 804015
,输出为:
nstudentid1 nstudentid2 nstudentid3
1 TRUE TRUE TRUE
2 TRUE TRUE TRUE
3 TRUE TRUE FALSE
4 TRUE TRUE TRUE
5 TRUE TRUE TRUE
6 TRUE TRUE TRUE
执行rowSums(student1==student1[,1])
提供
1 2 3 4 5 6
3 3 2 3 3 3
这里,第三行/元素具有较少数量的相同条目。将其等同于数据集的列数。 rowSums(student1==student1[,1])!=ncol(student1)
给出了
1 2 3 4 5 6
FALSE FALSE TRUE FALSE FALSE FALSE
另外,你可以尝试:
indx1 <- unique(which(student1!=student1[,1],arr.ind=TRUE)[,1])
student1[indx1,]
#nstudentid1 nstudentid2 nstudentid3
#3 80501005 80501005 804015