按月分组R表条目

时间:2015-08-05 14:29:54

标签: r plot

我有两列的CSV值,一个unix时间戳和一个版本字符串。我最终想要实现的是按月对数据进行分组并绘制数据,以便单个月是x轴上的条目,并为每个唯一版本字符串绘制一条线,其中y轴值应表示数字当月的点击量。

以下是一个小例子CSV:

timestamp,version
1434974143,1.0.0
1435734004,1.1.0
1435734304,1.0.0
1435735386,1.2.0

我是R的新手,所以我遇到了几个问题。首先,我用

成功读取了csv
mydata <- read.csv("data.csv")

并找出了一个将单个时间戳转换为R日期的功能:

as_time <- function(val){
    return(head(as.POSIXct(as.numeric(as.character(val)),origin="1970-01-01",tz="GMT")))
}

但是,几个 apply 函数中的非函数似乎在表列上有效。

那么如何创建一个数据结构,按月对版本命中进行分组,以后可以绘制?

2 个答案:

答案 0 :(得分:4)

比你想象的容易!

您实际上在寻找hist功能。

#Let's make some mock data    
# Set the random seed for reproducibility
set.seed(12345)

my.data <- data.frame(timestamp = runif(1000, 1420000000, 1460000000), 
                      version = sample(1:5, 1000, replace = T))

my.data$timestamp <- as.POSIXct(my.data$timestamp, origin = "1970-01-01")

# Histogram of the data, irrespective of version
hist(my.data$timestamp, "month")

# If you want to see the version then split the data first...
my.data.split <- split(my.data, my.data$version)
# Then apply hist
counts <- sapply(my.data.split, function (x)
  {
  h <- hist(x$timestamp, br = "month", plot = FALSE)
  h$counts
  })

# Transform into a matrix and plot
counts <- do.call("rbind", counts)  
barplot(counts, beside = T)

答案 1 :(得分:2)

您可以使用as.yearmon包中的zoo功能获取年/月格式:

library(zoo)
dat$yearmon <- as.yearmon(as.POSIXct(dat$timestamp, origin = "1970-01-01", tz = "GMT"))

然后,这取决于您想要对数据做什么。例如,每月版本点击次数(感谢@Frank修复):

dat %>% group_by(yearmon, version) %>%
         summarise(hits = n())