在 R 中加载 table 和数据框
Loading table and data frame in R
各位。我是 R 的新手,所以我需要帮助。 :) 我将一些列从一个 table (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
提前致谢...
如果字符串显示为数字,则表明它们已作为因子而不是字符读入。正确的更改位置是在阅读时,我。 e.在 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"
各位。我是 R 的新手,所以我需要帮助。 :) 我将一些列从一个 table (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
提前致谢...
如果字符串显示为数字,则表明它们已作为因子而不是字符读入。正确的更改位置是在阅读时,我。 e.在 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"