SQLDF R:计算数据框中的唯一值

时间:2017-06-11 13:26:55

标签: r dataframe sqldf

我有一个包含一列的数据框。有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

修改: Tim Biegeleisen指出,“Distinct”不是一个功能,因此不需要括号。因此,将 DISTINCT(V1)更新为DISTINCT V1

2 个答案:

答案 0 :(得分:4)

我们不需要distinct关键字,因为我们正在使用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

答案 1 :(得分:1)

我们可以使用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)