Как сгруппировать данные по идентификатору и получить уникальные значения всех столбцов в R? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть таблица с идентификатором и другими столбцами. Я хочу сгруппировать данные по идентификаторам и получить уникальные значения всех столбцов. enter image description here

сверху таблицы сгруппируйте по идентификатору и получите уникальный (Alt1, Alt2, Alt3)

Результат должен быть в векторной форме
A -> 1,2,3,5
B -> 1,3,4,5,7

1 Ответ

2 голосов
/ 14 апреля 2020

Мы можем получить данные в длинном формате и для каждого ID составить список unique значений.

library(dplyr)
library(tidyr)

df1 <- df %>%
  pivot_longer(cols = -ID) %>%
  group_by(ID) %>%
  summarise(value = list(unique(value))) %>%
  unnest(value)

df1

#    ID   value
#   <fct> <dbl>
# 1 A         1
# 2 A         3
# 3 A         2
# 4 A         5
# 5 B         1
# 6 B         4
# 7 B         5
# 8 B         3
# 9 B         6
#10 B         7

Мы можем сохранить его в виде списка, если необходимо, используя split.

split(df1$value, df1$ID)
#$A
#[1] 1 3 2 5

#$B
#[1] 1 4 5 3 6 7

data.table эквивалент вышеупомянутого будет:

library(Data.table)

setDT(df)
df2 <- melt(df, id.vars = 'ID')[, .(value = list(unique(value))), ID]

уникальные значения представлены в df2$value как вектор.

данные

df <- data.frame(ID = c('A', 'A', 'B', 'B'), 
       Alt1 = c(1, 2, 1, 3), 
       Alt2 = c(3, 5, 4, 6), 
       Alt3 = c(1, 3, 5, 7))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...