计算r中给定列的列的唯一值

计算r中给定列的列的唯一值,r,reshape,R,Reshape,我有一个像这样的数据框 col1 col2 col3 A 2 b1 A 3 b2 A 2 b2 A 2 b1 A 3 b2 我想得到col1和col2的每个组合的col3的唯一值的计数,如下所示 col1 col2 count_unique A 2 2 A 3 1 什么是最好的一行解决方案?正如@Frank和@akrun在他们的评论中指出的,您的问

我有一个像这样的数据框

col1 col2  col3
A      2    b1 
A      3    b2
A      2    b2
A      2    b1
A      3    b2
我想得到col1和col2的每个组合的col3的唯一值的计数,如下所示

col1  col2 count_unique
 A       2         2
 A       3         1

什么是最好的一行解决方案?

正如@Frank和@akrun在他们的评论中指出的,您的问题有几种可能的解决方案-以下是三种最常用的解决方案:

在底端R:

aggregate(col3~., df, function(x) length(unique(x)) )
setDT(df)[, uniqueN(col3), by=.(col1,col2)]
df %>% group_by(col1, col2) %>% summarise(col3=n_distinct(col3))
使用data.table包(v1.9.5及更高版本):

aggregate(col3~., df, function(x) length(unique(x)) )
setDT(df)[, uniqueN(col3), by=.(col1,col2)]
df %>% group_by(col1, col2) %>% summarise(col3=n_distinct(col3))
使用dplyr包:

aggregate(col3~., df, function(x) length(unique(x)) )
setDT(df)[, uniqueN(col3), by=.(col1,col2)]
df %>% group_by(col1, col2) %>% summarise(col3=n_distinct(col3))

正如@Frank和@akrun在评论中指出的,您的问题有几种可能的解决方案——以下是三种最常用的解决方案:

在底端R:

aggregate(col3~., df, function(x) length(unique(x)) )
setDT(df)[, uniqueN(col3), by=.(col1,col2)]
df %>% group_by(col1, col2) %>% summarise(col3=n_distinct(col3))
使用data.table包(v1.9.5及更高版本):

aggregate(col3~., df, function(x) length(unique(x)) )
setDT(df)[, uniqueN(col3), by=.(col1,col2)]
df %>% group_by(col1, col2) %>% summarise(col3=n_distinct(col3))
使用dplyr包:

aggregate(col3~., df, function(x) length(unique(x)) )
setDT(df)[, uniqueN(col3), by=.(col1,col2)]
df %>% group_by(col1, col2) %>% summarise(col3=n_distinct(col3))
其他两种选择:

普利尔 输出:

 col1 col2 freq
1    A    2    2
2    A    3    1
  col1 col2 n
1    A    2 2
2    A    3 1
sqldf 输出:

 col1 col2 freq
1    A    2    2
2    A    3    1
  col1 col2 n
1    A    2 2
2    A    3 1
其他两种选择:

普利尔 输出:

 col1 col2 freq
1    A    2    2
2    A    3    1
  col1 col2 n
1    A    2 2
2    A    3 1
sqldf 输出:

 col1 col2 freq
1    A    2    2
2    A    3    1
  col1 col2 n
1    A    2 2
2    A    3 1

聚合(col3~,df,函数(x)长度(唯一(x))
但是您想要的输出是错误的——第二行的col3只有一个唯一值。@Frank对此表示抱歉。更正了。谢谢你的解答。@maj对不起,我其实一点也不知道;通过反复试验,查看
?聚合
文档底部的示例,我们终于达到了目的。我总是使用data.table:
setDT(df)[,uniqueN(col3),by=(col1,col2)]
[当我在公式中找到点的解释时,我刚刚删除了我以前的注释。我的注释是“请您解释一下您使用的公式好吗?”]@Frank:谢谢。@akrun我对有人接受这些变化并把它们变成答案没有问题。不过,q可能是一个重复,所以我自己不会去做。
aggregate(col3~,df,function(x)length(unique(x))
但是您想要的输出是错误的——第二行的col3只有一个唯一值。@Frank对此表示抱歉。更正了。谢谢你的解答。@maj对不起,我其实一点也不知道;通过反复试验,查看
?聚合
文档底部的示例,我们终于达到了目的。我总是使用data.table:
setDT(df)[,uniqueN(col3),by=(col1,col2)]
[当我在公式中找到点的解释时,我刚刚删除了我以前的注释。我的注释是“请您解释一下您使用的公式好吗?”]@Frank:谢谢。@akrun我对有人接受这些变化并把它们变成答案没有问题。不过,q可能是个骗局,所以我自己不打算这么做。