r语言 - 使用 cbind 创建列式.csv文件,但"X"始终出现在第一行



我有一个运行良好的脚本,只是在我的R cbind操作中,与我在第一行中需要的数值相邻的是一个"X"。

这是我的脚本:

library(ncdf)
library(Kendall)
library(forecast)
library(zoo)
setwd("/home/cohara/RainfallData")
files=list.files(pattern="*.nc")
j=81
for (i in seq(1,9))
{
        file<-open.ncdf(sprintf("/home/cohara/RainfallData/%s.nc",i))
        year<-get.var.ncdf(file,"time")
        data<-get.var.ncdf(file,"var61")
        fit<-lm(data~year)              #least sqaures regression
        mean=rollmean(data,4,fill=NA)
        kendall<-Kendall(data,year)
        write.table(kendall[[2]],file="/home/cohara/RainfallAnalysis/Kendall_p-value_for_10%_increase_over_81_-_89_years.csv",append=TRUE,quote=FALSE,row.names=FALSE,col.names=FALSE)
        write.table(kendall[[1]],file="/home/cohara/RainfallAnalysis/Kendall_tau_for_10%_increase_over_81_-_89_years.csv",append=TRUE,quote=FALSE,row.names=FALSE,col.names=FALSE)
        png(sprintf("./10 percent increase over %s years.png",j))
        par(family="serif",mar=c(4,6,4,1),oma=c(1,1,1,1))
        plot(year,data,pch="*",col=4,ylab="Precipitation (mm)",main=(sprintf("10 percent increase over %s years",j)),cex.lab=1.5,cex.main=2,ylim=c(800,1400),abline(fit,col="red",lty=1.5))
        par(new=T)
        plot(year,mean,type="l",xlab="year",ylab="Precipitation (mm)",cex.lab=1.5,ylim=c(800,1400),lty=1.5)
        legend("bottomright",legend=c("Kendall tau = ",kendall[[1]]))
        legend("bottomleft",legend=c("Kendall 2-tailed p-value = ",kendall[[2]]))
        legend(x="topright",c("4 year moving average","Simple linear trend"),lty=1.5,col=c("black","red"),cex=1.2)
        legend("topleft",c("Annual total"),pch="*",col="blue",cex=1.2)
        dev.off()
        j=j+1
}
tmp<-read.csv("/home/cohara/RainfallAnalysis/Kendall_p-value_for_10%_increase_over_81_to_89_years.csv")
tmp2<-read.csv("/home/cohara/RainfallAnalysis/Kendall_p-value_for_10%_increase_over_81_-_89_years.csv")
tmp<-cbind(tmp,tmp2)
tmp3<-read.csv("/home/cohara/RainfallAnalysis/Kendall_tau_for_10%_increase_over_81_to_89_years.csv")
tmp4<-read.csv("/home/cohara/RainfallAnalysis/Kendall_tau_for_10%_increase_over_81_-_89_years.csv")
tmp3<-cbind(tmp3,tmp4)
write.table(tmp,"/home/cohara/RainfallAnalysis/Kendall_p-value_for_10%_increase_over_81_to_89_years.csv",sep="t",row.names=FALSE)
write.table(tmp3,"/home/cohara/RainfallAnalysis/Kendall_tau_for_10%_increase_over_81_to_89_years.csv",sep="t",row.names=FALSE)

来自创建的.csv文件的输出如下:

X0.0190228056162596 X0.000701081415172666
0.0395622998    0.00531819
0.0126547674    0.0108218994
0.0077754743    0.0015568719
0.0001407317    0.002680057
0.0096391216    0.012719159
0.0107234037    0.0092436085
0.0503448173    0.0103918528
0.0167525802    0.0025036721

我希望能够在数据上使用excel函数,所以,为了简单起见,我不想要行名(我可能会运行这个循环一百次),但我需要列名,因为否则第一组值就会被截断。

有人能告诉我"X"是从哪里来的,以及如何消除它吗?

提前感谢,Ciara

以下是我的想法。首先运行以下小示例:

df1 <- read.csv(text = "0.0190228056162596, 0.000701081415172666
0.0395622998,    0.00531819
0.0126547674,    0.0108218994")
df2 <- read.csv(text = "0.0190228056162596, 0.000701081415172666
0.0395622998,    0.00531819
0.0126547674,    0.0108218994", header = FALSE)
df1
df2
str(df1)
str(df2)
names(df1)
names(df2)
make.names(c(0.0190228056162596, 0.000701081415172666))

请阅读?read.csv和关于header参数的内容。正如您所发现的,header = TRUEread.csv中的默认值。因此,如果您读取的csv文件没有标头,read.csv仍然会"假设"该文件有标头,并使用第一行中的值作为标头。read.csv中的另一个参数是check.names,默认为TRUE:
If TRUE then the names of the variables in the data frame are checked to ensure that they are syntactically valid variable names. If necessary they are adjusted (by make.names)

在您的情况下,您读取的数据似乎缺少标题,并且第一行仅为数字。默认情况下,read.csv会将此行视为标头。make.names获取第一行中的值(此处为数字0.0190228056162596、0.000701081415172666),并吐出"语法有效变量名"X0.01902280561625 96和X0.000701081415172666。这不是你想要的。

因此,您需要显式设置header = FALSE,以避免read.csv将第一行转换为(有效的)变量名。

对于下一次,请提供一个最小、独立的示例。查看这些链接以了解一般想法,以及如何在R:此处这里在这里

中执行此操作

最新更新