6

我想问一下如何修复问题标题中描述的这个错误?就在昨天,代码运行良好,绘图例程生成了所需的图形。今天醒来,尝试添加一些功能,然后收到错误消息。

关于为什么以及如何解决这个问题的任何线索?

谢谢

数据链接: 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...
4

1 回答 1

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从一个数字变成了一个字符(“阶段 1(1965 到 1985)”位)。

由于您只绘制pop_t和列,pop_ur因此pop_ru在熔化之前将其拉出

morstats.pop <- melt(moroccostats[c("year","pop_t","pop_ur","pop_ru")], id="year")

那么您不必担心由于不相关的列而强制转换为其他类型。

于 2013-05-13T18:51:04.620 回答