уникальные ценности каждой группы - PullRequest
0 голосов
/ 29 сентября 2018

Я хочу найти уникальные имена y для каждого x во фрейме данных df.Например,

x <- c(1, 2, 3, 1, 2, 3, 1)
y <- c("alf", "be", "be", "cmg", "be", "cmg", "cmg")

df <- data.frame(x,y)
df
          x   y
       1  1 alf
       2  2  be
       3  3  be
       4  1 cmg
       5  2  be
       6  3 cmg
       7  1 cmg

То, что я хочу, это уникальные значения для каждого значения x

   x   y
   1 alf
     cmg

   2  be

   3  be
     cmg

, что я сделал, это

un_values<- df %>% group_by(x) %>% summarize(un_values=unique(y))

, но это даеттолько уникальные значения y без значений x.

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Этот код работал для меня

lapply(split(y, x), unique)
0 голосов
/ 29 сентября 2018

И с dplyr:

library(dplyr)
df %>% group_by(x) %>% arrange(x) %>% distinct()
# A tibble: 5 x 2
# Groups:   x [3]
      x      y
  <dbl> <fctr>
1     1    alf
2     1    cmg
3     2     be
4     3     be
5     3    cmg

Обратите внимание, что, поскольку у вас есть только одна переменная (y), кроме вашей групповой переменной (x), dplyr::distinct(df) также должна нормально работать

0 голосов
/ 29 сентября 2018

Если вы хотите использовать data.frame, попробуйте:

> aggregate(y~x, data=df, unique)
  x y.1 y.2
1 1 alf cmg
2 2  be cmg
3 3  be cmg
...