计算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可能是个骗局,所以我自己不打算这么做。