Как сложить raw и создать новую переменную в R

#r

#r

Вопрос:

Вот небольшой образец моих данных

 AB  AN  AQ  AP  AA
1   O1  N   12  13
2   K1  B   22  16
 

Я хочу сгенерировать эту таблицу

 AB  AN  AQ  New AP
1   O1  N   1   12
1   O1  N   2   13
2   K1  B   1   22
2   K1  B   2   16
 

Логика заключается в том, чтобы сложить одни и те же данные в AB, AN и AQ, затем сгенерировать новый цвет, который получает 1, а затем AP.
В этом raw те же данные, но новый столбец получает 2, а затем AA. Итак, новый столбец равен 1 и 2

Ответ №1:

Опция с reshape помощью from base R

 names(df)[4:5] <- paste0("AP", 1:2)
reshape(df, direction = "long", varying = 4:5, sep= "", timevar = "New")
#    AB AN AQ New AP id
#1.1  1 O1  N   1 12  1
#2.1  2 K1  B   1 22  2
#1.2  1 O1  N   2 13  1
#2.2  2 K1  B   2 16  2
 

данные

 df <- structure(list(AB = 1:2, AN = c("O1", "K1"), AQ = c("N", "B"), 
    AP = c(12L, 22L), AA = c(13L, 16L)), 
class = "data.frame", row.names = c(NA, -2L))
 

Ответ №2:

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

 library(dplyr)
library(tidyr)

df %>%
  pivot_longer(cols = c(AP, AA), 
               values_to = 'AP', 
               names_to = 'New') %>%
  mutate(New = match(New, unique(New)))

#     AB AN    AQ      New    AP
#  <int> <chr> <chr> <int> <int>
#1     1 O1    N         1    12
#2     1 O1    N         2    13
#3     2 K1    B         1    22
#4     2 K1    B         2    16
 

данные

 df <- structure(list(AB = 1:2, AN = c("O1", "K1"), AQ = c("N", "B"), 
    AP = c(12L, 22L), AA = c(13L, 16L)), 
class = "data.frame", row.names = c(NA, -2L))