如何识别 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
,行号 4
和 6
分别对列 1 & 3
和 2 & 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
使用 sweep
和 rowSums
的另一个选项:
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]),]
对于以下数据
> 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
,行号 4
和 6
分别对列 1 & 3
和 2 & 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
使用 sweep
和 rowSums
的另一个选项:
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]),]