пример 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