【问题标题】:Creating r dataframe with for loop使用 for 循环创建 r 数据框
【发布时间】:2015-08-29 18:03:40
【问题描述】:

我是编程新手。我正在解决一个问题,我需要使用一个函数创建一个数据框,该函数采用文件目录和文件名,并创建一个带有文件 ID 的数据框,以及每个文件的案例摘要。

当我使用以下参数运行程序时,数据框构建正确:

function("directory", 1:5)  # or any vector that starts with 1

  id nobs
1  1  117
2  2 1041
3  3  243
4  4  474
5  5  402

但是,当参数为

function("directory", 5) 

我在两者之间添加了 NAs

  id nobs
1  1    1
2 NA   NA
3 NA   NA
4 NA   NA
5  5  402

这里预期的结果应该是

 id nobs
1  5  402

function("directory", 3:7)  # id does not start with 1

complete("specdata", 5:10)
   id nobs
1   6    6
2  NA   NA
3  NA   NA
4  NA   NA
5   5  402
6   6  228
7   7  442
8   8  192
9   9  275
10 10  148

这是我的代码。任何帮助或指导将不胜感激

complete <- function(directory, id = 1:332) {

    slash <- "/"
    fileext <- ".csv"

    id <- numeric()

    nobs <- numeric()

    for(i in id) {     
            fileid <- as.numeric(i)
            file <- sprintf("%03.f", fileid)
            filename <- paste(directory, slash, file, fileext, sep = "")
            datafile <- read.csv(filename) #read file
            cases <- sum(complete.cases(datafile))


            id[i] <- i
            nobs[i] <- cases     



    fd <- data.frame(id, nobs, stringsAsFactors = FALSE) 
    fd

}

我的直觉是当id[i] &lt;- i时,i被分配到向量位置i。当i 为 != 1 时,它会用 NA 填充缺失的行。我尝试了不同的方法,但不知道如何将索引设置为从位置 1 开始。

【问题讨论】:

  • 这显然是来自 Peng Coursera 的作业。您不应该在 for 循环中修改索引。您应该使用为学生设置的课程网站寻求帮助。
  • 是的。我首先尝试了那条路线,但无法以我接近它的方式获得解决问题的提示。感谢您提供有关索引的提示。它帮助我了解它们是如何工作的。

标签: r for-loop dataframe


【解决方案1】:

这应该可以工作

 id <- append(id,i)

我还想知道您的代码是否有效,因为 id 变量已从向量重新分配给数字对象。

【讨论】:

  • 我做了你建议的改变,现在它就像一个魅力!我很高兴我带自己出去喝啤酒:-)。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2016-05-09
  • 1970-01-01
  • 2021-08-15
相关资源
最近更新 更多