如何识别 R 中所有列具有相同值的行号?

how to identify the row numbers having same value for all column in R?

对于以下数据

> data
   x1 x2 x3
1   1  0  0
2   0  1  0
3   0  0  1
4   1  0  1
5   1  0  0
6   0  1  1
7   1  0  0
8   0  1  0
9   1  1  1
10  1  0  0

如何确定哪些行在所有列中具有相同的值。对于 data,行号 46 分别对列 1 & 32 & 3 具有相同的值,行号 9 对所有列具有相同的值柱子。如何在 R 中识别这些行号。 任何帮助表示赞赏。

如果您的值只能是 0 或 1,并且您想要查找所有列中具有相同值的行,则必须查找 0 或列的长度:

df <- data[c(rowSums(data) == 0,rowSums(data) == length(data)),]

一个更通用的解决方案是使用@zero33 的回答 并执行

> bool <- apply(data, 1, function(row) length(unique(row)) == 1)
> bool
##     1     2     3     4     5     6     7     8     9    10 
## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE 

您可以使用该布尔向量来识别哪些行在所有列中具有相同的值

> data <- data[bool, ]
#   x1 x2 x3
# 9  1  1  1

使用 sweeprowSums 的另一个选项:

data[rowSums(sweep(data[, -1L], 1L, data[, 1L], `==`)) == ncol(data) - 1L, ]

输出:

  x1 x2 x3
9  1  1  1

数据:

data <- read.table(text="x1 x2 x3
1  0  0
0  1  0
0  0  1
1  0  1
1  0  0
0  1  1
1  0  0
0  1  0
1  1  1
1  0  0", header=TRUE)

还有一个选项是检查每一行的方差。方差为 0 的行的所有值都相同

data[apply(data, 1, var) == 0, ]
#  x1 x2 x3
#9  1  1  1

rowSums

的另一种方法
data[!rowSums(data[,1] != data[,-1]),]