以下是我的数据的前十行(总计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中看到解决方案。
答案 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"))