В R Как создать data.frame с уникальными значениями из одного столбца другого data.frame? - PullRequest
2 голосов
/ 21 января 2012

Я пытаюсь выучить R, но я застрял на чем-то, что кажется простым. Я знаю SQL, и мне проще всего ответить на этот вопрос с помощью этого языка. Может кто-нибудь помочь мне с переводом с SQL на R?

Я понял, что это:

    SELECT col1, sum(col2) FROM table1 GROUP BY col1

переводится так:

    aggregate(x=table1$col2, by=list(table1$col1), FUN=sum)

И я понял, что это:

    SELECT col1, col2 FROM table1 GROUP BY col1, col2

переводится на это:

    unique(table1[,c("col1","col2")])

Но что это за перевод?

    SELECT col1 FROM table1 GROUP BY col1

По какой-то причине «уникальная» функция переключается на другой тип возвращаемого значения при работе только с одним столбцом, поэтому она не работает так, как я ожидал.

-TC

Ответы [ 2 ]

2 голосов
/ 21 января 2012

Я предполагаю, что вы имеете в виду тот факт, что вызов unique для вектора вернет вектор, а не фрейм данных. Вот несколько примеров, которые могут помочь:

#Some example data
dat <- data.frame(x = rep(letters[1:2],times = 5),
                  y = rep(letters[3:4],each = 5))
> dat
   x y
1  a c
2  b c
3  a c
4  b c
5  a c
6  b d
7  a d
8  b d
9  a d
10 b d
> unique(dat)
  x y
1 a c
2 b c
6 b d
7 a d
#Unique => vector
> unique(dat$x)
[1] "a" "b"
#Same thing
> unique(dat[,'x'])
[1] "a" "b"
#drop = FALSE preserves the data frame structure
> unique(dat[,'x',drop = FALSE])
  x
1 a
2 b
#Or you can just convert it back (although the default column name is ugly)
> data.frame(unique(dat$x))
  unique.dat.x.
1             a
2             b
1 голос
/ 24 января 2012

Если вы знаете SQL, попробуйте пакеты sqldf и data.table .

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