как условно создавать категории, используя значения и последовательность других переменных - PullRequest
0 голосов
/ 02 февраля 2019

Буду признателен за любую помощь в создании функции, которая позволит мне создавать категории одной переменной, используя порядок набора значений других переменных.

В частности, я хочу функцию, которая:

  1. создает категорию E1 переменной variable время first времени, в которое каждая комбинация значений переменных A, B и ID появляется в наборе данных.
  2. создает категорию E2 переменной variable время second времени, в которое каждая комбинация значений переменных A, B и ID появляется в наборе данных.
  3. создает категорию E3 переменной variable время third времени, когда каждая комбинация значений переменных A, B и ID появляется в наборе данных.
  4. создает категорию En переменной variable время nth, когда каждая комбинация значений переменных A, B и ID появляется в наборе данных.

# пример данных:

rowdT<-structure(list(A = c("a1", "a2", "a1", "a1", "a2", "a1", "a1", 
            "a2", "a1"), B = c("b2", "b2", "b2", "b1", "b2", "b2", "b1", 
            "b2", "b1"), ID = c("3", "4", "3", "1", "4", "3", "1", "4", "1"
            ), E = c(0.621142094943352, 0.742109450696123, 0.39439152996948, 
            0.40694392882818, 0.779607277916503, 0.550579323666347, 0.352622183880119, 
            0.690660491345867, 0.23378944873769)), class = c("data.table", 
            "data.frame"), row.names = c(NA, -9L))     
sampleDT <- melt(rowdT, id.vars = c("A", "B", "ID"))

# входные данные:

    A  B  ID variable    value
1: a1 b2  3        E 0.6211421
2: a2 b2  4        E 0.7421095
3: a1 b2  3        E 0.3943915
4: a1 b1  1        E 0.4069439
5: a2 b2  4        E 0.7796073
6: a1 b2  3        E 0.5505793
7: a1 b1  1        E 0.3526222
8: a2 b2  4        E 0.6906605
9: a1 b1  1        E 0.2337894

# ожидаемый результат:

    A  B  ID variable    value
4: a1 b1  1        E1 0.4069439
1: a1 b2  3        E1 0.6211421
2: a2 b2  4        E1 0.7421095
7: a1 b1  1        E2 0.3526222
3: a1 b2  3        E2 0.3943915
5: a2 b2  4        E2 0.7796073
9: a1 b1  1        E3 0.2337894
6: a1 b2  3        E3 0.5505793
8: a2 b2  4        E3 0.6906605

Заранее благодарен за любую помощь.

1 Ответ

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

Сначала преобразуйте вашу переменную в символьный вектор для правильного приведения, а затем используйте data.table

sampleDT$variable = as.character(sampleDT$variable)

sampleDT[, variable := paste(variable,1:.N,sep = ""), by = c("A", "B", "ID")]

Это создает уникальные подсчеты на основе наблюдаемых комбинаций A, B и ID.

Получается следующий вывод:

    A  B ID variable     value
1: a1 b2  3       E1 0.6211421
2: a2 b2  4       E1 0.7421095
3: a1 b2  3       E2 0.3943915
4: a1 b1  1       E1 0.4069439
5: a2 b2  4       E2 0.7796073
6: a1 b2  3       E3 0.5505793
7: a1 b1  1       E2 0.3526222
8: a2 b2  4       E3 0.6906605
9: a1 b1  1       E3 0.2337894

, который вы можете изменить в случае необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...