Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在1和0列中标识相同值的群集_R - Fatal编程技术网

R 在1和0列中标识相同值的群集

R 在1和0列中标识相同值的群集,r,R,这可能是一个愚蠢的问题,但我是一个初学者,在其他任何地方我都找不到答案 给定下面示例中的列,有没有一种方法可以让R自动识别1和0的集群,这样我就可以轻松地计算总共有多少个集群(在本例中,三个1集群和三个0集群) 先谢谢你 > my_column = matrix(c(1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0)) > my_column [,1] [1,] 1 [2,] 1 [3,] 1

这可能是一个愚蠢的问题,但我是一个初学者,在其他任何地方我都找不到答案

给定下面示例中的列,有没有一种方法可以让R自动识别1和0的集群,这样我就可以轻松地计算总共有多少个集群(在本例中,三个1集群和三个0集群)

先谢谢你

> my_column = matrix(c(1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0))
> my_column
      [,1]
 [1,]    1
 [2,]    1
 [3,]    1
 [4,]    1
 [5,]    1
 [6,]    0
 [7,]    0
 [8,]    0
 [9,]    0
[10,]    1
[11,]    1
[12,]    1
[13,]    0
[14,]    0
[15,]    0
[16,]    0
[17,]    0
[18,]    1
[19,]    1
[20,]    1
[21,]    1
[22,]    1
[23,]    1
[24,]    0
[25,]    0
[26,]    0

您可以尝试为每行指定组。一个简单的方法是找到改变的点。为此,只需计算条目
i
i+1
之间的差值,并取绝对值。之后,您只需使用
cumsum
函数为每个组创建一个id:

my_column = matrix(c(1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0))
new_column <- abs(c(0, my_column[-length(my_column)] - my_column[-1]))
groups <- cumsum(new_column)

my_mat <- cbind(original = my_column, new_column = new_column, group = groups)
> my_mat
        new_column  group
 [1,] 1          0      0
 [2,] 1          0      0
 [3,] 1          0      0
 [4,] 1          0      0
 [5,] 1          0      0
 [6,] 0          1      1
 [7,] 0          0      1
 [8,] 0          0      1
 [9,] 0          0      1
[10,] 1          1      2
[11,] 1          0      2
[12,] 1          0      2
[13,] 0          1      3
[14,] 0          0      3
[15,] 0          0      3
[16,] 0          0      3
[17,] 0          0      3
[18,] 1          1      4
[19,] 1          0      4
[20,] 1          0      4
[21,] 1          0      4
[22,] 1          0      4
[23,] 1          0      4
[24,] 0          1      5
[25,] 0          0      5
[26,] 0          0      5
my_column=矩阵(c(1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0))

新建列您可以尝试为每行指定组。一个简单的方法是找到改变的点。为此,只需计算条目
i
i+1
之间的差值,并取绝对值。之后,您只需使用
cumsum
函数为每个组创建一个id:

my_column = matrix(c(1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0))
new_column <- abs(c(0, my_column[-length(my_column)] - my_column[-1]))
groups <- cumsum(new_column)

my_mat <- cbind(original = my_column, new_column = new_column, group = groups)
> my_mat
        new_column  group
 [1,] 1          0      0
 [2,] 1          0      0
 [3,] 1          0      0
 [4,] 1          0      0
 [5,] 1          0      0
 [6,] 0          1      1
 [7,] 0          0      1
 [8,] 0          0      1
 [9,] 0          0      1
[10,] 1          1      2
[11,] 1          0      2
[12,] 1          0      2
[13,] 0          1      3
[14,] 0          0      3
[15,] 0          0      3
[16,] 0          0      3
[17,] 0          0      3
[18,] 1          1      4
[19,] 1          0      4
[20,] 1          0      4
[21,] 1          0      4
[22,] 1          0      4
[23,] 1          0      4
[24,] 0          1      5
[25,] 0          0      5
[26,] 0          0      5
my_column=矩阵(c(1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0))

new_column您可以计算0和任何类似列的值

Count_0 <- sum(my_column[,1] == 0)
Count_1 <- sum(my_column[,1] == 1)

Count\u 0您可以像这样计算任何列的0和1

Count_0 <- sum(my_column[,1] == 0)
Count_1 <- sum(my_column[,1] == 1)

Count\u 0我们可以使用
rle

table(rle(my_column[,1])$values)
输出:

0 1 
3 3 

我们可以使用
rle

table(rle(my_column[,1])$values)
输出:

0 1 
3 3 

查看
rle()
函数查看
rle()
函数不是你的downvoter,而是
new\u列因为OP想要计算集群的数量,我建议用它开头,而不是放在最下面。也许可以在管道中创建分组列。谢谢!这个答案最适合我的需要,而不是你的下一个投票者,但是
new_专栏因为OP想要计算集群的数量,我建议用它开头,而不是放在最底部。也许可以在管道中创建分组列。谢谢!这个答案最适合我的需要,而不是你的投票人,但问题是“确定1和0的集群,这样我可以很容易地计算总共有多少个(在本例中,三个1集群和三个0集群)”。这个答案对集群没有任何作用(OP似乎是指连续运行)。仅仅计算1和0是一个不同的问题。OP正在寻找“3个1的簇,3个0的簇”的结果。你的结果是“14 1s,12 0s”。当然,如果有理由,我可以随时修改答案以提供帮助。除非我得到反馈,否则我怎么知道呢?不是你的下选者,对不起,但感谢你的回答不是你的下选者,而是问题“确定1和0的簇,以便我可以轻松地计算总共有多少个(在本例中,三组1和三组0)”。此答案与组无关(OP表示连续运行)。只计算1和0是另一个问题。OP正在查找结果“三组1,三组0”。您的结果是“14 1s,12 0s”.当然,我可以随时修改答案来帮助你,如果有理由的话,除非我得到反馈,否则我怎么知道呢?不是你的反对者,对不起,但是谢谢你的回答