lapply 撤消了我之前的功能,但我不知道为什么
lapply undoes my previous function, but I don't know why
我想按年份列将数据框拆分为 33 个不同数据框的列表。然后我想更改它,以便列表中的每一年列都显示为“2015”。然后我想将每个数据帧写入一个文件,其中的文件标有原始年份的名称。我非常接近这样做:
hist<-read.csv("hist3.csv", skip = 9, header=TRUE) #Read data
spt1<-split(hist, hist$year) #Split data
fun<-function(x){within(x, year<-2015)} #Little function to change years
lapply(spt1, fun) #Use the function on each dataframe
#in list, looks good in console
###BUT here the year column changes from 2015 back to original years
lapply(names(spt1), function(x){write.table(spt1[[x]],
file = paste("met", x, ".met", sep = ""),append=T,
sep=paste(rep(" ",6), collapse=""), quote=F, row.names = FALSE,
col.names=FALSE)})
.csv 在这里:hist3.csv
您可以尝试将输出分配给新对象 (spt2
) 或更新旧对象 (spt1
),然后使用 write.table
spt2 <- lapply(spt1, fun)
lapply(names(spt2), function(x) {write.table(spt2[[x]],
file = paste("met", x, ".met", sep = ""),append=T,
sep=paste(rep(" ",6), collapse=""), quote=F, row.names = FALSE,
col.names=FALSE)})
head(read.table('met1985.met', header=FALSE),3)
# V1 V2 V3 V4 V5 V6
#1 2015 1 5.26 -1.5 -9.5 0.83
#2 2015 2 5.30 -0.7 -9.2 0.00
#3 2015 3 5.09 -0.5 -10.0 0.37
head(read.table('met1996.met', header=FALSE),3)
# V1 V2 V3 V4 V5 V6
#1 2015 1 1.87 -0.40 -6.69 0
#2 2015 2 4.52 -0.94 -16.70 0
#3 2015 3 6.93 -6.50 -10.47 0
这是我的想法的概要。不同的方法。下一步是在循环中添加一行以将每年更改为 2015 年。
hist <- read.csv("C:/.../hist3.csv", header=TRUE,colClasses='character')
spt1<-split(hist, hist$year)
names <- names(spt1)
for (i in names){
assign(paste("met",i,sep="."), hist[hist$year == i,])
}
head(met.1985)
year day radn maxt mint rain
1 1985 1 5.26 -1.5 -9.5 0.83
2 1985 2 5.3 -0.7 -9.2 0
3 1985 3 5.09 -0.5 -10 0.37
我想按年份列将数据框拆分为 33 个不同数据框的列表。然后我想更改它,以便列表中的每一年列都显示为“2015”。然后我想将每个数据帧写入一个文件,其中的文件标有原始年份的名称。我非常接近这样做:
hist<-read.csv("hist3.csv", skip = 9, header=TRUE) #Read data
spt1<-split(hist, hist$year) #Split data
fun<-function(x){within(x, year<-2015)} #Little function to change years
lapply(spt1, fun) #Use the function on each dataframe
#in list, looks good in console
###BUT here the year column changes from 2015 back to original years
lapply(names(spt1), function(x){write.table(spt1[[x]],
file = paste("met", x, ".met", sep = ""),append=T,
sep=paste(rep(" ",6), collapse=""), quote=F, row.names = FALSE,
col.names=FALSE)})
.csv 在这里:hist3.csv
您可以尝试将输出分配给新对象 (spt2
) 或更新旧对象 (spt1
),然后使用 write.table
spt2 <- lapply(spt1, fun)
lapply(names(spt2), function(x) {write.table(spt2[[x]],
file = paste("met", x, ".met", sep = ""),append=T,
sep=paste(rep(" ",6), collapse=""), quote=F, row.names = FALSE,
col.names=FALSE)})
head(read.table('met1985.met', header=FALSE),3)
# V1 V2 V3 V4 V5 V6
#1 2015 1 5.26 -1.5 -9.5 0.83
#2 2015 2 5.30 -0.7 -9.2 0.00
#3 2015 3 5.09 -0.5 -10.0 0.37
head(read.table('met1996.met', header=FALSE),3)
# V1 V2 V3 V4 V5 V6
#1 2015 1 1.87 -0.40 -6.69 0
#2 2015 2 4.52 -0.94 -16.70 0
#3 2015 3 6.93 -6.50 -10.47 0
这是我的想法的概要。不同的方法。下一步是在循环中添加一行以将每年更改为 2015 年。
hist <- read.csv("C:/.../hist3.csv", header=TRUE,colClasses='character')
spt1<-split(hist, hist$year)
names <- names(spt1)
for (i in names){
assign(paste("met",i,sep="."), hist[hist$year == i,])
}
head(met.1985)
year day radn maxt mint rain
1 1985 1 5.26 -1.5 -9.5 0.83
2 1985 2 5.3 -0.7 -9.2 0
3 1985 3 5.09 -0.5 -10 0.37