在R中加载表和数据框

时间:2016-07-20 11:38:43

标签: r dataframe regression linear-regression

大家。我是R的新人,所以我需要帮助。 :)我从一个表(ulpod)复制了一些列到另一个表(ulpod1),我有一个由字符串组成的列的问题。它们显示为数字而不是字符串。例如,您可以看到Country UK显示为数字18.这是代码示例和结果:

    ulpod<-read.xlsx("C:/Users/milica/Desktop/VESNAseminarski/AE&DE.xls",sheetIndex=1,sheetName="Sheet1",startRow=1,endRow=955,colIndex=c(1:14,1),header=TRUE)
     options(max.print=2000000000)

     ulpod1=matrix(0,90,12)
     m=1

     ulpod1='colnames<-'(ulpod1,c("Year","Country","CO2_pc","Fertilizer","AgrLand","Forest","CropIndex","FoodIndex","LivestIndex","RuralPopGrow","AVA","GDP_pc"))

    for(i in 1:954){
      if(ulpod[i,1]=="1990" || ulpod[i,1]=="2000" || ulpod[i,1]=="2005" || ulpod[i,1]=="2008" || ulpod[i,1]=="2010"){
        ulpod1[m,1]=ulpod[i,1];
        ulpod1[m,2]=ulpod[i,2];
        ulpod1[m,3]=ulpod[i,3];
        ulpod1[m,4]=ulpod[i,4];
        ulpod1[m,5]=ulpod[i,5];
        ulpod1[m,6]=ulpod[i,6];
        ulpod1[m,7]=ulpod[i,7];
        ulpod1[m,8]=ulpod[i,8];
        ulpod1[m,9]=ulpod[i,9];
        ulpod1[m,10]=ulpod[i,10];
        ulpod1[m,11]=ulpod[i,11];
        ulpod1[m,12]=ulpod[i,14];
        m=m+1;
        i=i+1;
        }

    Year=ulpod1[,1,drop=FALSE]
    Country=ulpod1[,2,drop=FALSE]
    CO2_pc=ulpod1[,3,drop=FALSE]
    Fertilizer=ulpod1[,4,drop=FALSE]
    AgrLand=ulpod1[,5,drop=FALSE]
    Forest=ulpod1[,6,drop=FALSE]
    CropIndex=ulpod1[,7,drop=FALSE]
    FoodIndex=ulpod1[,8,drop=FALSE]
    LivestIndex=ulpod1[,9,drop=FALSE]
    RuralPopGrow=ulpod1[,10,drop=FALSE]
    AVA=ulpod1[,11,drop=FALSE]
    GDP_pc=ulpod1[,12,drop=FALSE]

呼叫头(国家,10)的结果是:

    Country
     [1,]       9
     [2,]       9
     [3,]       9
     [4,]       9
     [5,]       9
     [6,]      18
     [7,]      18
     [8,]      18
     [9,]      18
     [10,]      18

因此我遇到数据框问题:

    P<-pdata.frame(ulpod1,index=c("Year","Country"))

错误是:

    Error in x[, !na.check] : (subscript) logical subscript too long

提前致谢...

1 个答案:

答案 0 :(得分:1)

如果字符串显示为数字,这是一个纯粹的符号,它们已被作为因子而不是字符读入。在读书时改变的正确位置,我。即在read.xlsx()中使用StringsAsFactors = FALSE作为参数。

在您提到的评论中,当您使用as.character更改一列时,所有列都将成为字符串。原因是,您将数据存储在矩阵中。矩阵的所有元素都是相同的类型。您应该将数据(ulpod1)存储在data.frame而不是矩阵中。 data.frame中的每一列都可以有不同的类型。

> m <- matrix(c(1,1,1,1,1,1,1,1,1),nrow=3)
> str(m)
 num [1:3, 1:3] 1 1 1 1 1 1 1 1 1
> m[1,2]<-as.character(m[1,2])
> str(m)
 chr [1:3, 1:3] "1" "1" "1" "1" "1" "1" "1" "1" "1"