如何计算行频率

时间:2016-03-02 20:01:17

标签: r dplyr

简化数据的前两列的最简单方法是什么,以便使用新的变量freq计算每一行?

换句话说,请从这里开始:

   var1 var2
1    a    d
2    b    e
3    b    e
4    c    f
5    c    f
6    c    f

对此:

   var1 var2 freq
1    a    d    1
2    b    e    2
3    c    f    3

3 个答案:

答案 0 :(得分:3)

您可能没有仔细查看dplyr包(您标记它:))。最简单的方法是......

df <-data.frame(freq1 = c("a","b","b","c","c","c"),
                freq2 = c("d","e","e","f","f","f"))
df %>% group_by(freq1,freq2) %>% tally()

输出

   freq1  freq2     n
  (fctr) (fctr) (int)
1      a      d     1
2      b      e     2
3      c      f     3

答案 1 :(得分:0)

我不知道这是否最简单,但如果数据不复杂,您可以使用paste0(collapse="_")创建唯一代码,然后使用简单的table命令通过该唯一代码进行聚合

data<-read.csv("data.csv")

x<-apply(data,1,function(x) paste0(x,collapse = "_"))

table(x)

答案 2 :(得分:0)

如果由于某种原因您不想使用dplyr软件包的count函数,另一种方法是使用ftable生成的列联表功能和过滤0次发生的意外事件。例如:

df <- data.frame(freq1 = c("a", "b", "b", "c", "c", "c"),
                 freq2 = c("d", "e", "e", "f", "f", "f"))
x <- as.data.frame(ftable(df))
x <- x[x$Freq > 0, ]

这会产生输出:

  freq1 freq2 Freq
1     a     d    1
5     b     e    2
9     c     f    3