Существует ли функция R для группировки данных по одной переменной (столбцу)? - PullRequest
0 голосов
/ 27 сентября 2019

Я измерил бактериальную ингибирующую способность на вирусы.У меня есть матрица данных из n строк (отдельные лица) и 4 столбцов (a, b, c, x).В зависимости от столбца х я хотел бы определить их как хорошие или плохие ингибиторы.Тем не менее, я не уверен, как поставить порог столбца х, в зависимости от других измеренных столбцов (а, б, в).Есть ли функция R, которая могла бы разделить / сгруппировать мой фрейм данных?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

В логике dplyr есть group_by(), она работает следующим образом:

library(dplyr)

df %>%
group_by(A) %>% # df is now grouped by column A
summarise(Mean = mean(C)) # calculates the mean of C for each group of A, summarise will delete any other columns not summarised and show only distinct rows

df %>%
group_by(A) %>%
mutate(Mean = mean(C)) # This will add the grouped mean to each row without changing the data frame

Если вы суммируете, то все готово, но после group_by и mutate вам нужно ungroup ваш фрейм данных в какой-то момент.

0 голосов
/ 27 сентября 2019

пример data.table ниже.В данных у нас есть 50 наблюдений (а) в 5 группах (группа).

Данные

dt = data.table(
  a = runif(1:50),
  Group = sample(LETTERS[1:5], 50, replace = T)
)

Пример 1

Во-первых, мы можем вычислить среднее значение a группы и обозначить его 'Хороший », если он выше 0,5, и« Плохой », если он ниже.Обратите внимание, что это резюме не включает.

dt1 = dt[, .(Mean = mean(a)), keyby = Group][, Label := ifelse(Mean > 0.5, 'Good', 'Bad')]

> dt1
   Group      Mean Label
1:     A 0.2982229   Bad
2:     B 0.4102181   Bad
3:     C 0.6201973  Good
4:     D 0.4841881   Bad
5:     E 0.4443718   Bad

Пример 2

Как и в ответе Фенгуена, следующий код не будет суммировать данные по группе;он будет просто отображать значение группы и метку рядом с каждым наблюдением.

dt2 = dt[, Mean := mean(a), by = Group][, Label := ifelse(Mean > 0.5, 'Good', 'Bad')]

> head(dt2)
           a Group      Mean Label
1: 0.4253110     E 0.4443718   Bad
2: 0.4217955     A 0.2982229   Bad
3: 0.7389260     E 0.4443718   Bad
4: 0.2499628     E 0.4443718   Bad
5: 0.3807705     C 0.6201973  Good
6: 0.2841950     E 0.4443718   Bad

Пример 3

Наконец, мы, конечно, можем применить условный аргумент для созданияновый столбец без предварительного вычисления сгруппированной переменной.В следующем примере проверяется комбинированное условие для столбцов a и b.

dt3 = data.table(a = runif(100), b = runif(100))

dt3[, abGrThan0.5 := ifelse((a > 0.5 & b > 0.5), TRUE, FALSE)]

> head(dt3)
           a          b abGrThan0.5
1: 0.5132690 0.02104807       FALSE
2: 0.8466798 0.96845916        TRUE
3: 0.5776331 0.79215074        TRUE
4: 0.9740055 0.59381244        TRUE
5: 0.4311248 0.07473373       FALSE
6: 0.2547600 0.09513784       FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...