通过列表或向量将CSV动态读入R dfs?
我正在处理一些年度和季度数据,我想写一个循环,循环读取每年四个不同CSV的四个季度的数据,然后在它们上运行一个脚本通过列表或向量将CSV动态读入R dfs?,r,csv,R,Csv,我正在处理一些年度和季度数据,我想写一个循环,循环读取每年四个不同CSV的四个季度的数据,然后在它们上运行一个脚本 #prep strings beg <- "fmli" end <- ".csv" fileList <- c() for(i in 1996:2012){ yearString <- toString(i) year <- substr(toString(i), 3,4) for(i in 1:4){ quarter <
#prep strings
beg <- "fmli"
end <- ".csv"
fileList <- c()
for(i in 1996:2012){
yearString <- toString(i)
year <- substr(toString(i), 3,4)
for(i in 1:4){
quarter <- toString(i)
fileToRead <- paste(sep="", beg, year, quarter, end)
#add to list
#fileList <- append(fileToRead, i)
}
a1 <- read.csv(fileList[1])
a2 <- read.csv(fileList[2])
a3 <- read.csv(fileList[3])
a4 <- read.csv(fileList[4])
}
#准备字符串
beg使用列表:
beg <- "fmli"
end <- ".csv"
for(i in 1996:2012){
yearString <- toString(i)
year <- substr(toString(i), 3,4)
dataList <- list()
for(j in 1:4){
quarter <- toString(j)
fileToRead <- paste(sep="", beg, year, quarter, end)
#add to list
dataList[[j]] <- read.csv(fileToRead)
}
names(dataList) <- c("a1", "a2", "a3", "a4")
# then run your script on dataList[["a1"]], dataList[["a2"]], etc.
}
beg使用列表:
beg <- "fmli"
end <- ".csv"
for(i in 1996:2012){
yearString <- toString(i)
year <- substr(toString(i), 3,4)
dataList <- list()
for(j in 1:4){
quarter <- toString(j)
fileToRead <- paste(sep="", beg, year, quarter, end)
#add to list
dataList[[j]] <- read.csv(fileToRead)
}
names(dataList) <- c("a1", "a2", "a3", "a4")
# then run your script on dataList[["a1"]], dataList[["a2"]], etc.
}
beg以下是我的做法。不要对
s使用,而是使用lappy
。其中的函数返回的对象将是列表的一部分
lapply(setNames(1996:2012, paste0("y", 1996:2012)), function(y) {
year <- substr(y, 3, 4)
lapply(setNames(1:4, paste0("a", 1:4)), function(qt) {
fileToRead <- paste0("fmli", y, qt, ".csv")
read.csv(fileToRead)
})
})
lappy(setNames(1996:2012,paste0(“y”,1996:2012)),函数(y){
年份我会这样做。与其使用for
s,不如使用lappy
。函数返回的对象将是列表的一部分
lapply(setNames(1996:2012, paste0("y", 1996:2012)), function(y) {
year <- substr(y, 3, 4)
lapply(setNames(1:4, paste0("a", 1:4)), function(qt) {
fileToRead <- paste0("fmli", y, qt, ".csv")
read.csv(fileToRead)
})
})
lappy(setNames(1996:2012,paste0(“y”,1996:2012)),函数(y){
年份我总是使用assign
读取我的.csv文件
#prep strings
beg <- "fmli"
end <- ".csv"
a <- c("a1", "a2", "a3", "a4");
for(i in 1996:2012){
year <- substr(toString(i), 3,4)
for(j in 1:4){
quarter <- toString(j)
fileToRead <- paste(beg, year, quarter, end, sep="")
assign(a[j], read.csv(file=fileToRead));
}
# Now use your script on a1-a4
# a1-a4 will be overwritten in next iteration
}
#准备字符串
beg我总是使用assign
来读取我的.csv文件
#prep strings
beg <- "fmli"
end <- ".csv"
a <- c("a1", "a2", "a3", "a4");
for(i in 1996:2012){
year <- substr(toString(i), 3,4)
for(j in 1:4){
quarter <- toString(j)
fileToRead <- paste(beg, year, quarter, end, sep="")
assign(a[j], read.csv(file=fileToRead));
}
# Now use your script on a1-a4
# a1-a4 will be overwritten in next iteration
}
#准备字符串
beg可能重复的paste
可能重复的内容将试图强制使用字符,但我认为OP更广泛的一点是,他们错误地将toString
误认为是as.character
设计的,我想。@joran确实,我甚至忘记了这一点。这就是为什么我看起来像是在读另一种语言年龄…paste
将试图强制使用字符,但我认为OP更广泛的一点是,他们错误地将toString
误认为是为.character
设计的。我想。@joran确实,我甚至忘记了这一点。这就是为什么我看起来像是在读另一种语言的原因……这不起作用,因为“赋值”仅适用于字符串--这将返回“第一个参数无效”错误…有什么想法吗?很抱歉给您带来不便。当然,数组a
必须包含字符串,并且需要使用a[j]
而不是a[i]
来访问它。这将不起作用,因为“分配”仅适用于字符串--这将返回“第一个参数无效”错误…有什么想法吗?很抱歉给您带来不便。当然,数组a
必须包含字符串,并且需要使用a[j]
而不是a[i]进行访问
无论出于何种原因,这只会将数据帧的一列附加到列表中,而列表将成为一个包含4个整数向量的列表。为什么会发生这种情况?是的。我想明白了。此外,将内部循环中的第二个i更改为“j”可能更有意义,就像其他人所做的那样。但这起到了作用,并且最接近i w作为请求,所以我将继续并打勾:)打得好,覆盖I
完全没有破坏一切:)不管出于什么原因,这只会将数据帧的一列附加到列表中,列表就变成了一个包含4个整数向量的列表。为什么会发生这种情况?是的。我明白了。而且,像其他人一样,将内部循环中的第二个i改为“j”可能更有意义。但这是有效的,并且最接近于我的asking为,所以我将继续并打勾:)打得好,覆盖I
完全没有破坏一切:)