【问题标题】:How to use loop to read, add col and merge in R?如何使用循环在 R 中读取、添加列和合并?
【发布时间】:2017-01-20 14:53:21
【问题描述】:

我有几个 CSV,我想阅读它并选择特定的列,然后为每个列添加一个年份编号,最后将它们合并在一起。

例如,我有一个数据为 2003.csv、2004.csv、2005.csv 我想阅读它们,然后选择 A,B,C 列 接下来,添加年份,与文件名相同,最后合并。我一一知道怎么弄,像这样:

d2003 <- read.csv("2003.csv",stringsAsFactors=F)
n2003 <- d2003[,c("A", "B","C"]
n2003$year <- rep(2003,nrow(n2003))

我得到了 n2003,然后是 n2004 .....最后,将它们合并在一起 但我不知道如何在循环中做到这一点。就目前而言,我知道如何循环阅读

rdata <- list()
list_file <- list.files(pattern = "*.csv")
for (k in 1:length(list_file)){
  rdata[[k]] <- read.csv(list_file[k],stringsAsFactors=F)
}

然后我就卡住了……

【问题讨论】:

  • 每个 CSV 文件的列和类型是什么?

标签: r csv


【解决方案1】:

试试下面的脚本:

years <- c("2003", "2004", "2005")
df <- NA
sapply(years, function(x) {
                 filename <- paste0(x, ".csv")
                 df.next <- read.csv(filename, stringsAsFactors=FALSE)
                 df.next$year <- as.numeric(x)
                 if (is.na(df)) {  
                    df <- df.next
                 } else {
                    df <- rbind(df, df.next)
                 }
              })

您在最初的尝试中遇到了一些小问题。以下行是多余的:

n2003$year <- rep(2003,nrow(n2003))

这是多余的,因为n2003$year &lt;- 2003 已经将2003 分配给整个列。另一个可能的问题是您正在遍历一个列表,而您可以使用 apply() 函数来执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2016-06-18
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多