我想问一下如何解决问题标题中描述的这个错误?就在昨天,代码工作正常,绘图程序产生了所需的图形。今天醒来并尝试添加一些功能,然后收到错误消息。
任何线索,为什么以及如何解决这个问题?
THX
数据链接: Data.csv
代码:
# Loading data
morStats <- read.csv(file = "F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/DissertationDraft/MoroccoCGE-CC_Stats.csv", header=TRUE, sep=",", na.string="NA", dec=".", strip.white=TRUE)
# Transferring the .csv data into data frames
moroccostats <- as.data.frame(morStats)
# Changing the data in the dataframe to "as.numeric"
moroccostats[3:38] <- sapply(moroccostats[3:38],as.numeric)
moroccostats <- droplevels(moroccostats)
# reorder
moroccostats <- transform(moroccostats,year=factor(year,levels=unique(year)))
# Load packages
library(reshape2)
library(ggplot2)
library(lattice)
library(grid)
library(plyr)
library(gridExtra)
library(scales)
#----------------------------------------------------------------------
# Figure 1: Evolution of population (in absolute terms) 1960-2050
#---------------------------------------------------------------------
#_Code_Begin...
moroccostats.f <- melt(moroccostats, id="year")
morstats.pop <- moroccostats.f[moroccostats.f$variable %in% c("pop_t","pop_ur","pop_ru"),]
Figure1 <- ggplot(data=morstats.pop,aes(x=factor(year), y=value,colour=variable))
Figure1 + geom_line(aes(group=factor(variable)),size=1) + geom_point() + scale_colour_manual("Population",labels=c("Total","Urban","Rural"),values = c("black","red","blue")) +
labs(y="Population (in 1000)") +
theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 13, hjust = 1, vjust = 0.5),axis.title.x = element_blank()) +
theme(axis.text.y = element_text(colour = 'black', size = 13, hjust = 0.5, vjust = 0.5), axis.title.y = element_text(size = 10, hjust = 0.5, vjust = 0.2, face = 'bold')) +
scale_x_discrete(breaks = seq(1960, 2050, by=2)) +
scale_y_continuous(breaks = seq(0, 42000, by=5000))
#_Code_End...
答案 0 :(得分:10)
moroccostats
具有结构
> str(moroccostats)
'data.frame': 91 obs. of 38 variables:
$ year : Factor w/ 91 levels "1960","1961",..: 1 2 3 4 5 6 7 8 9 10 ...
$ periodframe : Factor w/ 4 levels "0","Phase 1 (1965 to 1985)",..: 1 1 1 1 1 2 2 2 2 2 ...
$ pop_t : num 11635 11897 12177 12473 12785 ...
$ pop_ur : num 3395 3547 3703 3862 4026 ...
...
当你按年份融化以获得moroccostats.f
时,你会得到
> str(moroccostats.f)
'data.frame': 3367 obs. of 3 variables:
$ year : Factor w/ 91 levels "1960","1961",..: 1 2 3 4 5 6 7 8 9 10 ...
$ variable: Factor w/ 37 levels "periodframe",..: 1 1 1 1 1 1 1 1 1 1 ...
$ value : chr "0" "0" "0" "0" ...
请注意,value
是一个字符,因为periodframe
是一个因素。我猜测periodframe
从一个数字转变为一个字符(“第一阶段(1965年至1985年)”位)的变化是什么。
由于您只绘制pop_t
和pop_ur
以及pop_ru
列,因此请在融化之前将其删除
morstats.pop <- melt(moroccostats[c("year","pop_t","pop_ur","pop_ru")], id="year")
然后你不必担心强迫其他类型的会费到不相关的列。