Как получить следующие элементы дублированных значений во фрейме данных в r? - PullRequest
0 голосов
/ 01 мая 2019

Я хочу удалить дублированные элементы в столбце A, и мне нужно объединить связанные элементы дублированных значений в новый столбец У меня есть этот фрейм данных:

A   B   Repeat
a   x1  5
a   x5  5
a   x4  5
a   x2  5
a   x3  5
b   x2  3
b   x4  3
b   x1  3
c   x5  3
c   x9  3
c   x3  3
d   x2  2
d   x8  2
e   x5  2
e   x1  2
f   x6  1
g   x2  1
h   x5  1
i   x4  1
j   x7  1

Это мой ожидаемый фрейм данных:

A   Repeat  Merged values of B
a   5   x1,x5,x4,x2,x3
b   3   x2,x4,x1
c   3   x5,x9,x3
d   2   x2,x8
e   2   x5,x1
f   1   x6
g   1   x2
h   1   x5
i   1   x4
j   1   x7

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Используя dplyr, мы можем group_by A и создать разделенное запятыми значение для B, используя toString и получить first значение Repeat.

library(dplyr)

df %>% 
  group_by(A) %>%
  summarise(new_B = toString(B),
            Repeat = first(Repeat))


# A tibble: 10 x 3
#    A     new_B              Repeat
#   <fct> <chr>               <int>
# 1 a     x1, x5, x4, x2, x3      5
# 2 b     x2, x4, x1              3
# 3 c     x5, x9, x3              3
# 4 d     x2, x8                  2
# 5 e     x5, x1                  2
# 6 f     x6                      1
# 7 g     x2                      1
# 8 h     x5                      1
# 9 i     x4                      1
#10 j     x7                      1
0 голосов
/ 01 мая 2019

Мы можем сделать это с data.table

library(data.table)
setDT(df)[, .(new_B = toString(B), Repeat = first(Repeat)), A]
#    A              new_B Repeat
# 1: a x1, x5, x4, x2, x3      5
# 2: b         x2, x4, x1      3
# 3: c         x5, x9, x3      3
# 4: d             x2, x8      2
# 5: e             x5, x1      2
# 6: f                 x6      1
# 7: g                 x2      1
# 8: h                 x5      1
# 9: i                 x4      1
#10: j                 x7      1

данные

df <- structure(list(A = c("a", "a", "a", "a", "a", "b", "b", "b", 
"c", "c", "c", "d", "d", "e", "e", "f", "g", "h", "i", "j"), 
    B = c("x1", "x5", "x4", "x2", "x3", "x2", "x4", "x1", "x5", 
    "x9", "x3", "x2", "x8", "x5", "x1", "x6", "x2", "x5", "x4", 
    "x7"), Repeat = c(5L, 5L, 5L, 5L, 5L, 3L, 3L, 3L, 3L, 3L, 
    3L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L)),
    class = "data.frame", row.names = c(NA, 
-20L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...