大家。我是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
提前致谢...
答案 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"