SQLDF R: подсчет уникальных значений во фрейме данных

У меня есть фрейм данных с одним столбцом. Есть 10 рядов.

(4.0 * 3.0)
(4.0 * 3.0)
(2.0 * (1.0 * (1.0 * 6.0)))
(4.0 * (3.0 * 1.0))
(6.0 * 2.0)
(6.0 * 2.0)
(2.0 * 6.0)
(2.0 * 6.0)
(2.0 * 6.0)
(6.0 * 2.0)

Мне нужно извлечь уникальные значения в столбце и количество раз, когда это происходит. Используя пакет sqldf, я смог получить уникальные значения. Но не счет.

Запрос:

sqldf("SELECT V1, COUNT(DISTINCT V1) as DinctC from dataset GROUP BY V1")

Выход:

                           V1 DinctC
1 (2.0 * (1.0 * (1.0 * 6.0)))      1
2                 (2.0 * 6.0)      1
3         (4.0 * (3.0 * 1.0))      1
4                 (4.0 * 3.0)      1
5                 (6.0 * 2.0)      1

Я хочу:

                           V1 DinctC
1 (2.0 * (1.0 * (1.0 * 6.0)))      1
2                 (2.0 * 6.0)      3
3         (4.0 * (3.0 * 1.0))      1
4                 (4.0 * 3.0)      2
5                 (6.0 * 2.0)      3

Редактировать: как указал Тим Бигелейзен, «Отличительное» не является функцией, поэтому скобки не нужны. Поэтому обновление DISTINCT(V1) до DISTINCT V1


person SriniShine    schedule 11.06.2017    source источник


Ответы (2)


Нам не нужно отдельное ключевое слово, так как мы используем предложение GROUP BY.

sqldf("SELECT V1, COUNT(V1) as DinctC from dataset GROUP BY V1")

Результат:

                           V1 DinctC
1 (2.0 * (1.0 * (1.0 * 6.0)))      1
2                 (2.0 * 6.0)      3
3         (4.0 * (3.0 * 1.0))      1
4                 (4.0 * 3.0)      2
5                 (6.0 * 2.0)      3
person SriniShine    schedule 11.06.2017

Мы можем использовать count

library(dplyr)
count(df, V1)
# A tibble: 5 x 2
#                          V1     n
#                       <chr> <int>
#1 (2.0 * (1.0 * (1.0 * 6.0)))     1
#2                 (2.0 * 6.0)     3
#3         (4.0 * (3.0 * 1.0))     1
#4                 (4.0 * 3.0)     2
#5                 (6.0 * 2.0)     3

Или table из base R

table(df$V1)
person akrun    schedule 11.06.2017
comment
Спасибо большое. Однако я ищу способ получить тот же результат с sqldf. В случае, если я не нашел, я собираюсь использовать этот метод. - person SriniShine; 11.06.2017
comment
@SriniShine Спасибо за комментарии. Я думаю, у вас уже есть другое решение с sqldf - person akrun; 11.06.2017