我有一个包含16个独立时间序列的大型数据集。我想在3x7网格中绘制它们,其中顶行是以IN结尾的每个时间序列,最下面的行是以OUT结尾的每个时间序列。在中间行,我将重复以RN结尾的两个时间序列中的每一个,每个时间序列对应于每个IN / OUT对。我已经设置了我认为必须完成的逻辑和语法,但我仍然在努力处理数据类,并且无法使脚本运行足够长的时间来调试其余的。我在R比较陌生,所以我不确定如何继续。
library(ggplot2)
numbers <- read.csv("./AllData.csv", header=TRUE)
num <- (ncol(numbers) - 4)/4*3 #converts 36 columns to 24 plots involving 8 timeseries
par(mfrow=c(3,7))
for(i in 1:num){
if (i < 8) {
qplot(as.POSIXct(as.Date(numbers[4*i+1])), numbers[4*i+2], data="numbers", xlab="Date", ylab="Feet", main=numbers[4*i+2,1])
} else if (i < 15) {
qplot(as.POSIXct(as.character(numbers[4*i-6]), format="%m/%d/%Y %H:%M"), numbers[4*i-5], data="numbers", xlab="Date", ylab="Feet", main=numbers[4*i-5,1])
} else {
qplot(as.POSIXct(as.character(numbers[4*i-13]), format="%m/%d/%Y %H:%M"), numbers[4*i-12], data="numbers", xlab="Date", ylab="Feet", main=numbers[4*i-12,1])
}
代替“as.POSIXct”,我还尝试了“as.Date”,“as.POSIXlt”,只是按原样绘制数据集,但都导致类似的错误通知我ggplot无法使用我使用的任何课程。我已尝试使用下面的基本绘图功能,但接收到的错误是我的x和y具有不同的长度,我已检查并且长度相等。
par(mfrow=c(3,7))
for(i in 1:num){
if (i < 8) {
x <- as.POSIXct(as.character(numbers[4*i+1]), format="%m/%d/%Y %H:%M")
x <- numbers[4*i+1]
y <- numbers[4*i+2]
main <- numbers[4*i+2,1]
} else if (i < 15) {
x <- as.POSIXct(as.character(numbers[4*i-6]), format="%m/%d/%Y %H:%M")
y <- numbers[4*i-5]
main <- numbers[4*i-5,1]
} else {
x <- as.POSIXct(as.character(numbers[4*i-13]), format="%m/%d/%Y %H:%M")
y <- numbers[4*i-12]
main <- numbers[4*i-12,1]
}
plot(x, y, type="l", xlab="Date", ylab="Feet", heading=main)
}
任何智慧或指导都将受到赞赏。这是我的数据集:https://drive.google.com/file/d/0BzEFYP8cpjHpUlluSlNZaTN1RDA/view?usp=sharing
答案 0 :(得分:1)
这里有一些我已经改变的事情,[
(子集化)与[[
(索引)混淆,ggplot
数据框被指定为字符变量(导致ggplot
无法处理字符变量的错误消息),列名(读入names
属性)与第一行混淆等。
公平地说,一开始每个人都会遇到这种情况。我强烈建议阅读Hadley Wickham的前两章&#34; Advanced-R&#34;编程书(或类似的东西),然后再尝试其他雄心勃勃的东西。您将看到我的意思,如果一个人不理解名称(和其他属性),子集,数据框和列表(数据框是R中的专用列表),那么使用R非常困难。< / p>
在线版本的链接位于:http://adv-r.had.co.nz/
首先尝试让一些小例子正常工作。这太开始了。
无论如何这里是更正后的代码:
library(ggplot2)
numbers <- read.csv("./AllData.csv", header=TRUE)
num <- (ncol(numbers) - 4)/4*3 #converts 36 columns to 24 plots involving 8 timeseries
par(mfrow=c(3,7))
for(i in 1:1){
if (i < 8) {
qplot(as.Date(numbers[[4*i+1]],"%m/%d/%Y %H:%M"), numbers[[4*i+2]], xlab="Date", ylab="Feet", main=names(numbers)[4*i+2])
# qplot(as.POSIXct(as.character(numbers[4*i+1]), format="%m/%d/%Y %H:%M"), numbers[[4*i+2]], xlab="Date", ylab="Feet", main=numbers[4*i+2,1])
} else if (i < 15) {
qplot(as.Date(numbers[[4*i-6]],"%m/%d/%Y %H:%M"), numbers[[4*i-5]], xlab="Date", ylab="Feet", main=names(numbers)[4*i-5])
# qplot(as.POSIXct(as.character(numbers[4*i-6]), format="%m/%d/%Y %H:%M"), numbers[[4*i-5]], xlab="Date", ylab="Feet", main=numbers[4*i-5,1])
} else {
qplot(as.Date(numbers[[4*i-13]],"%m/%d/%Y %H:%M"), numbers[[4*i-12]], xlab="Date", ylab="Feet", main=names(numbers)[4*i-12])
# qplot(as.POSIXct(as.character(numbers[4*i-13]), format="%m/%d/%Y %H:%M"), numbers[[4*i-12]], xlab="Date", ylab="Feet", main=numbers[4*i-12,1])
}
}
这是情节(我将其缩减为一个情节,因为它们需要很长时间):