这可能是一个愚蠢的问题,但是我是一个初学者,在其他任何地方都找不到答案。
鉴于下面示例中的列,R有一种方法可以自动识别1和0的簇,这样我就可以轻松计算总数(在这种情况下,三个1和3的簇)的是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
答案 0 :(得分:4)
我们可以使用rle
和table
:
table(rle(my_column[,1])$values)
输出:
0 1
3 3
答案 1 :(得分: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
现在您拥有了所需的一切。
要计算组数,您可以执行以下操作:
library(dplyr)
my_df <- data.frame(original = my_column, new_column = new_column, group = groups)
my_df %>% group_by(original) %>% summarise(n_groups = n_distinct(group))
# A tibble: 2 x 2
original n_groups
<dbl> <int>
1 0 3
2 1 3
答案 2 :(得分:-2)
您可以像这样计算任何列的0和1
Count_0 <- sum(my_column[,1] == 0)
Count_1 <- sum(my_column[,1] == 1)
或在整个数据框中使用apply