计算在一列

时间:2015-11-04 16:18:51

标签: r

这就是我的数据框架:

a <- c(1,1,4,4,5)
b <- c(1,2,3,3,5)
c <- c(1,4,4,4,5)
d <- c(2,2,4,4,5)
e <- c(1,5,3,3,5)

df <- data.frame(a,b,c,d,e)

我想写一些东西,它返回向量e中具有重复值的向量a,b,c,d的所有唯一实例。

例如:

  a b c d e 
1 1 1 1 2 1 
2 1 2 4 2 5 
3 4 3 4 4 3 
4 4 3 4 4 3 
5 5 5 5 5 5 

第3行和第4行直到向量d(具有4344的组合)完全相同,因此只应返回其中一个实例,但它们在向量e中具有2个重复值。我想要计算那些 - 所以4344的组合在向量e中有2个重复值。

预期输出将是某个组合(例如4344)在向量e中重复多少次的次数。所以在这种情况下它会是这样的:

a b c d   e
4 3 4 4   2

R和SQL都可以工作,无论工作如何。

1 个答案:

答案 0 :(得分:2)

再次,请参阅上面的评论,但我相信以下内容为您提供了第一个问题的开始。首先,创建一个&#34;密钥&#34;变量(在本例中名为key_abcd,使用tidyr::uniteuniteabcd) 。然后,按此e变量计算key_abcdgroup_by是隐含的。

library(tidyr)
library(dplyr)

df <- data.frame(a,b,c,d,e,f,g)

df %>%
  unite(key_abcd, a, b, c, d) %>%
  count(key_abcd, e)

#   key_abcd     e     n
#      (chr) (dbl) (int)
# 1  1_1_1_2     1     1
# 2  1_2_4_2     5     1
# 3  4_3_4_4     3     2
# 4  5_5_5_5     5     1

从你如何表达这个问题看来,你只对#34;多于一个&#34;因此,您可以将%>% filter(n > 1)添加到上面的代码中。