【问题标题】:To find number of complete cases in a data frame and make a new data frame with the number of such complete cases from each file在数据框中查找完整案例的数量,并使用每个文件中此类完整案例的数量创建一个新的数据框
【发布时间】:2014-12-14 20:51:43
【问题描述】:

我想获取给定数据框的完整案例数,并以数据框的形式显示它们,其中 id 和 nobs(特定 id 的完整案例数)作为列。到目前为止,我得到了 id 的答案,它们是 10、23、45 等单个数字,但对于像 c(2,3,4,5) 这样的数字集,但我得到了 a 中每个数字的所有长度的总和在打印所有数字时设置。所以我想知道哪里出错了。下面是我的代码。

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

 file_list <- list.files(directory, full.names=TRUE)

 tmp <- vector(mode = "list", length = length(file_list))
 for (i in seq_along(file_list)) {
 tmp[[i]] <- read.csv(file_list[[i]])
 }
 output <- do.call(rbind, tmp)

 complete <- output[complete.cases(output),]


 d<-data.frame(id,nobs=length(which(complete[,"ID"] %in% id)))
 d
  }`

谢谢

【问题讨论】:

  • 当您使用do.call(rbind,tmp) 时,您将到目前为止读取的所有表格绑定在一起。所以output中的行数就是总行数(不包括不完整的情况)。
  • 这不是 Coursera 的问题吗?
  • @ananda 是的,你也上这门课吗?
  • @RajaRaghudeepEmani,不。我从 SO 的早期问题中认识到这个问题。请四处搜索,如果您仍然无法回答,请编辑您的问题,显示您遇到的具体问题。
  • @AnandaMahto 当我调用一组数字作为 id 时我被卡住了,例如 id= c(2,4,5,6) 我没有得到我需要的数据框个人身份的完整案例,而是获得个人身份的所有结果的总和。对于像 id=45 或 id =3 am 这样的单个数字 id,获取正确的数据帧,问题仅在于它是一组数字。

标签: r dataframe


【解决方案1】:

这还没有经过测试,所以它确实属于评论,但它有点太长了。

试试这个:

## not tested
directory <- "...directory with your files..."
nobs   <- sapply(list.files(directory, full.names=TRUE),
                 function(file) sum(complete.cases(read.table(file))))
result <- data.frame(id=seq_along(nobs),nobs)

我感觉这会用更少的代码产生你想要的结果。

【讨论】:

  • 您好,感谢您的代码,但是当我运行它时,它没有得到所需的输出。我想要的输出是关于 ID 的完整案例数。我有示例结果(d396qusza40orc.cloudfront.net/rprog%2Fdoc%2Fcomplete-demo.html)。从我的代码中,我得到了单个数字的结果,但没有得到一组数字的结果,我觉得在形成我的 data.frame 时存在一些问题,或者我应该运行一个循环......我坚持下去。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 2022-01-01
  • 2019-07-12
  • 2015-09-02
  • 1970-01-01
相关资源
最近更新 更多