我有* .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
答案 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()