R

时间:2017-10-10 19:20:35

标签: r math ggplot2 plyr

我有* .csv中的数据集,如

a ,b
1 ,2
3 ,4
5 ,2

实际上,这是一个非常大(超过500,000条记录)的数据集,其中a的unix时间和b中的名称。我需要建立一个散点图,我决定在一段时间内将重复的名字计算超过10次并在它们上构建图形。但是当我尝试

library(ggplot2)
library(plyr)

compl <- ddply(num.csv,.(b),nrow)

) 然后我在表中只有两列,我失去了时间列。如何在表格中创建新列并根据名称的可重复性条件构建图表?

这就是我的期望

a ,b ,repeatsOfB
1 ,2 ,2
3 ,4 ,1
5 ,2 ,2

并在行上绘制ony wats repeatsOfB&gt; 10

2 个答案:

答案 0 :(得分:0)

您可以使用包dplyr计算每个组的记录数量,并过滤掉少于10次的记录:

compl <- num.csv %>% # take num.csv data.frame
  group_by(a, b) %>%  # group_by a and b (similar to SQL group by)
  summarise(n = n()) %>% # count occurences of a and b
  filter(n > 10) # keep only those where number of rows is greater than 10

注意:如果您不想排除n <= 10行,只需删除最后一行。

答案 1 :(得分:0)

我首先设置了一个最小的工作示例 - 如果我正确理解了您的问题,我们实际上并不需要时间列。 我并不完全确定你真正想要绘制的内容:当有超过十个时,是否计入b中的个别名称?我在tidyverse中提出了一个解决方案(如http://r4ds.had.co.nz中所述)。

我首先按列分组,计算各个实例,过滤所有出现次数&gt; 10并将其输入ggplot函数:


library(tidyverse)

# set up a minimal example:
x <- c("a","b","c","d","e","f","g")
data <- tibble(b=sample(x, size = 1000, replace = T))

data %>% 
  group_by(b) %>% 
  count() %>% 
  filter(n>10) %>% 
  ggplot(aes(x=b, y =n)) +
  geom_col()