Определите кластеры одинаковых значений в столбцах 1 и 0 - PullRequest
0 голосов
/ 07 февраля 2019

Возможно, это глупый вопрос, но я новичок, и я не смог найти ответ где-либо еще.

Учитывая столбец в примере ниже, есть ли способ для 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

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Вы можете посчитать 0 и единицы для любого столбца, например,

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

Или использовать apply для всего кадра данных

0 голосов
/ 07 февраля 2019

Мы можем использовать rle и table:

table(rle(my_column[,1])$values)

Выход:

0 1 
3 3 
0 голосов
/ 07 февраля 2019

Вы можете попробовать указать группы для каждого ряда.Простой способ - найти точку изменения.Для этого просто вычислите разницу между записями i и i + 1 и возьмите абсолютное значение.После этого вам нужно всего лишь использовать функцию cumsum для создания идентификатора для каждой группы:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...