R数据框列名称重命名

时间:2017-12-10 04:13:05

标签: r

我是R的新手,不知道为什么我必须在程序结尾重命名数据框列名,尽管我已经在程序开头定义了带有列名的数据框。使用数据框,我有两列,我必须在ID列下保存序列,在NOBS列中保存一些数字。

>> C = {ones(3,4), 2, 2, 3};
>> y = reshape(C{:});
>> size(y) % check
ans =
     2     2     3

2 个答案:

答案 0 :(得分:1)

您的具体问题并不十分清楚,因为您没有提供complete and verifiable example。但我仍然可以就改进代码提出一些建议。

1)不建议成长'循环中的data.frame。这在R中非常低效,因为它每次都复制整个结构。更好的方法是在开始时分配整个data.frame,然后填充循环中的行。

2)R有一个方便的函数paste0,不需要你指定sep = ""

3)您无法在na.rm = TRUE中指定sum,因为is.na永远不会返回NA

把它们放在一起:

complete = function(directory, id = 1:332) {
  collectCounts = data.frame(id=id, nobs=numeric(length(id))) 
  for(i in 1:length(id))  {
    fileName = sprintf("%03d", id[i])
    fileLocation = paste0(directory, "/", fileName,".csv")
    fileData = read.csv(fileLocation, header=TRUE)
    completeCount = sum(!is.na(fileData[, 2]))
    collectCounts[i, 'nobs'] <- completeCount
  }
}

答案 1 :(得分:0)

如果没有示例数据,总是难以回答问题。

你可以从

开始
collectCounts = data.frame(id, nobs=NA)

在循环中,执行:

collectCounts[i, 2] <- completeCount

这是另一种方法:

complete <- function(directory, id = 1:332) {
    nobs <- sapply(id, function(i) {
            fileName = paste0(sprintf("%03d",i), ".csv")
            fileLocation = file.path(directory, fileName)
            fileData = read.csv(fileLocation, header=TRUE)
            sum(!is.na(fileData[,2]), na.rm=TRUE)
        }
    )
    data.frame(id=id, nobs=nobs)
}