我有两列的CSV值,一个unix时间戳和一个版本字符串。我最终想要实现的是按月对数据进行分组并绘制数据,以便单个月是x轴上的条目,并为每个唯一版本字符串绘制一条线,其中y轴值应表示数字当月的点击量。
以下是一个小例子CSV:
timestamp,version
1434974143,1.0.0
1435734004,1.1.0
1435734304,1.0.0
1435735386,1.2.0
我是R的新手,所以我遇到了几个问题。首先,我用
成功读取了csvmydata <- 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 函数中的非函数似乎在表列上有效。
那么如何创建一个数据结构,按月对版本命中进行分组,以后可以绘制?
答案 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())