R:如何总结分布在多个列上的彩票数量(理想情况下使用dplyr)

时间:2015-11-01 05:43:21

标签: r dplyr

以下是我的数据的前十行(总计1053)

1  10/31/2015  8  9 36 38 41 47
2  10/28/2015  2  5  7 15 22 30
3  10/24/2015  1  8 17 21 23 34
4  10/21/2015  5 18 22 28 31 40
5  10/17/2015 10 12 29 30 31 39
6  10/14/2015  5 12 16 22 46 48
7  10/10/2015 18 20 32 33 44 47
8   10/7/2015  7 24 26 32 34 47
9   10/3/2015 12 17 22 36 37 45
10  9/30/2015  5 12 18 22 24 25

第一列是日期,其他列是中奖彩票号码。我想知道如何总结每个数字的计数。例如,我想知道36次出现了多少次,41次等等。我正在寻找第2列到第7列用两列代替,一列有彩票球的数量,以及在中奖彩票中出现的次数。我很感激任何答案,但理想情况下我希望在dplyr或tidyr中看到解决方案。

1 个答案:

答案 0 :(得分:2)

我们可以在table之后使用unlist除第一列之外的列,并使用'tbl'输出的data.frame中的两列创建names tbl'作为'Count'列。

tbl <- table(unlist(df1[-1]))
df2 <- data.frame(Name= names(tbl), Count= as.vector(tbl),
                                    stringsAsFactors=FALSE)

如果我们使用dplyr/tidyr

library(dplyr)
library(tidyr)
gather(df1, Var, Name, 2:ncol(df1)) %>% 
                         count(Name)

数据

df1 <- structure(list(Date = c("10/31/2015", "10/28/2015", "10/24/2015", 
"10/21/2015", "10/17/2015", "10/14/2015", "10/10/2015", "10/7/2015", 
"10/3/2015", "9/30/2015"), v1 = c(8L, 2L, 1L, 5L, 10L, 5L, 18L, 
7L, 12L, 5L), v2 = c(9L, 5L, 8L, 18L, 12L, 12L, 20L, 24L, 17L, 
12L), v3 = c(36L, 7L, 17L, 22L, 29L, 16L, 32L, 26L, 22L, 18L), 
v4 = c(38L, 15L, 21L, 28L, 30L, 22L, 33L, 32L, 36L, 22L), 
v5 = c(41L, 22L, 23L, 31L, 31L, 46L, 44L, 34L, 37L, 24L), 
v6 = c(47L, 30L, 34L, 40L, 39L, 48L, 47L, 47L, 45L, 25L)),
.Names = c("Date", 
"v1", "v2", "v3", "v4", "v5", "v6"), class = "data.frame",
 row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))