【问题标题】:Loading table and data frame in R在 R 中加载表和数据框
【发布时间】:2016-07-20 11:38:43
【问题描述】:

每个人。我是 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]

调用 head(Country,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

提前谢谢...

【问题讨论】:

  • 我认为您正在这样做m &lt;- matrix(0); m[1,1] &lt;- factor('a'); m,因此您可以将因素更改为字符m &lt;- matrix(0); m[1,1] &lt;- as.character(factor('a')); m
  • 我已经这样做了,我将 ulpod1[m,2]=ulpod[i,2] 更改为 ulpod1[m,2]=as.character(factor(ulpod[i,2] ));或 ulpod1[m,2]=as.character(ulpod[i,2]);在 for 循环中,但我将所有列作为字符串。查看以下结果:@rawr
  • 年份国家 CO2_pc [1,] "1990" "Ireland" "-0.220554400992975" [2,] "2000" "Ireland" "-0.127178700493732" [3,] "2005" "Ireland" " -0.144987627991366”[4,]“2008”“爱尔兰”“-0.187046990811592”[5,]“2010”“爱尔兰”“-0.229643587654196”[6,]“1990”“英国”“-0.1678377810150395”

标签: r dataframe regression linear-regression


【解决方案1】:

如果字符串显示为数字,这是一个舒尔符号,表明它们已作为因子而不是字符被读入。正确的地方是在阅读时进行更改,即。 e.在 read.xlsx() 中,以 StringsAsFactors=FALSE 作为参数。

在您提到的 cmets 中,当您使用 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"

【讨论】:

  • 我像 ulpod1=data.frame(ulpod1) 一样存储,现在可以工作了,谢谢。但是现在,当我打电话时: P
  • 这第二个问题如果不看数据真的很难回答。之前没有提到名为 P 的 data.frame。检查str(P) 可能的原因或发布一个新问题,包括str(P) 的输出
  • 线性回归的plm函数需要pdata.frames...语法是plm(formula=Y~X, pdata.frame,...)。 P没问题,我想...谢谢anaway...:)
猜你喜欢
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多