R 如何提取矩阵中的重复行
我有这个矩阵R 如何提取矩阵中的重复行,r,R,我有这个矩阵 > Y > [,1] [,2] [,3] [,4] [1,] "0" "2" "9" "5" [2,] "4" "7" "7" "3" [3,] "1" "5" "7" "9" [4,] "7" "8" "7" "4" [5,] "7" "8" "7" "4" [6,] "1" "1" "7" "2" [7,] "7" "8" "7" "4" ... 从这个矩阵中,我想得到所有重复1次、2次、3次的重复
> Y
> [,1] [,2] [,3] [,4]
[1,] "0" "2" "9" "5"
[2,] "4" "7" "7" "3"
[3,] "1" "5" "7" "9"
[4,] "7" "8" "7" "4"
[5,] "7" "8" "7" "4"
[6,] "1" "1" "7" "2"
[7,] "7" "8" "7" "4"
...
从这个矩阵中,我想得到所有重复1次、2次、3次的重复行,以此类推
比如说
“7”“8”“7”“4”
在Y中发生3次。如何查找所有其他案例
因此,输出应为:
返回Y中出现2次的所有行。
返回Y中出现3次的所有行。
返回Y中出现4次或以上的所有行。
我已经试着用计算机来解决这个问题
> duplicate
命令,但这还不够。这里有一个简单的解决方案,它将矩阵中的行连接成一个字符串,然后将字符串出现的频率制成表格 首先,我们将生成一些简单的假数据。我生成随机的0和1,以确保有大量的重复项:
Y[,1][,2][,3][,4]
#> [1,] 0 0 0 1
#> [2,] 0 0 0 0
#> [3,] 0 0 0 0
#> [4,] 0 0 0 1
#> [5,] 0 1 1 0
#> [6,] 0 0 1 0
#我将每行中的所有值折叠成一个字符串,使c(0,1,0,1)变成“0101”
row.ids[1,]0 1
#> [2,] 0 0 0 1
#> [3,] 0 1 1 0
#> [4,] 0 0 0 1
#> [5,] 0 1 1 0
#> [6,] 0 1 1 0
#所有四重复制行
Y[row.ids%在%names中(row.freqs[row.freqs==4]),]
#> [,1] [,2] [,3] [,4]
#> [1,] 0 0 0 0
#> [2,] 0 0 0 0
#> [3,] 0 0 1 0
#> [4,] 0 0 1 0
#> [5,] 0 0 0 0
#> [6,] 0 0 1 0
#> [7,] 0 1 1 1
#> [8,] 0 1 1 1
#> [9,] 0 1 1 1
#> [10,] 0 0 0 0
#> [11,] 0 1 1 1
#> [12,] 0 0 1 0
由(v0.2.1)创建于2019-02-20这里是一个简单的解决方案,它将矩阵中的行连接成一个字符串,然后将字符串出现的频率制成表格 首先,我们将生成一些简单的假数据。我生成随机的0和1,以确保有大量的重复项:
Y[,1][,2][,3][,4]
#> [1,] 0 0 0 1
#> [2,] 0 0 0 0
#> [3,] 0 0 0 0
#> [4,] 0 0 0 1
#> [5,] 0 1 1 0
#> [6,] 0 0 1 0
#我将每行中的所有值折叠成一个字符串,使c(0,1,0,1)变成“0101”
row.ids[1,]0 1
#> [2,] 0 0 0 1
#> [3,] 0 1 1 0
#> [4,] 0 0 0 1
#> [5,] 0 1 1 0
#> [6,] 0 1 1 0
#所有四重复制行
Y[row.ids%在%names中(row.freqs[row.freqs==4]),]
#> [,1] [,2] [,3] [,4]
#> [1,] 0 0 0 0
#> [2,] 0 0 0 0
#> [3,] 0 0 1 0
#> [4,] 0 0 1 0
#> [5,] 0 0 0 0
#> [6,] 0 0 1 0
#> [7,] 0 1 1 1
#> [8,] 0 1 1 1
#> [9,] 0 1 1 1
#> [10,] 0 0 0 0
#> [11,] 0 1 1 1
#> [12,] 0 0 1 0
由(v0.2.1)使用注释末尾的测试矩阵
Y
创建于2019-02-20,使用aggregate
创建一个数据框ag
,该数据框的行是Y
的唯一行,然后是它们出现的次数计数
ag <- aggregate(cbind(count = apply(Y, 1, toString)) ~ ., as.data.frame(Y),
FUN = length)
nc <- ncol(Y)
subset(ag, count == 2, select = -count) # shows rows which occur twice
split(ag[1:nc], ag$count) # splits unique rows into those that occur once, twice, etc.
ag使用末尾注释中的测试矩阵Y
,使用aggregate
创建一个数据框ag
,该数据框的行是Y
的唯一行,然后是它们出现的次数计数
ag <- aggregate(cbind(count = apply(Y, 1, toString)) ~ ., as.data.frame(Y),
FUN = length)
nc <- ncol(Y)
subset(ag, count == 2, select = -count) # shows rows which occur twice
split(ag[1:nc], ag$count) # splits unique rows into those that occur once, twice, etc.
ag请用dput()制作一个可复制的示例并更好地解释预期输出。请用dput()制作一个可复制的示例并更好地解释预期输出。