【问题标题】:Counting complete rows of a data frame in R - data programming course在 R - 数据编程课程中计算数据帧的完整行
【发布时间】:2017-12-19 10:59:56
【问题描述】:

我正在尝试编写一个代码,它 (1) 从目录中读取指定范围的文件,(2) 计算每个文件中完整行的数量,以及 (3) 将我的答案作为 2 列数据框返回 (具有指定的列名)。

complete <- function(directory, ID){
   filelist <- list.files(directory, full.names = TRUE)[ID]
      x <- lapply(filelist, function(x){read.csv(x, header = TRUE)})
          y <- complete.cases(data.frame(x))
              z <- sum(y*1)
                 print(z)
  }

它适用于 1 个文件,但不适用于一个范围,如果我使用 complete("directory", 1:2) 我得到:

错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,: 参数暗示不同的行数:1461、3652

一旦我可以获得完整值的数量,我想我就可以计算出如何返回数据框。

提前致谢,

玫瑰

【问题讨论】:

  • 您可以将逻辑向量乘以 1 ... 这将为每个 TRUE 留下 1,为每个 FALSE 留下 0 ... 然后很容易总结并为您提供总数。
  • @Val 我试过了,虽然它适用于 1 个文件,但当我使用一个范围(例如 1:2)时,出现以下错误 Error in (function (..., row.names = NULL,check.rows = FALSE,check.names = TRUE,:参数暗示不同的行数:1461、3652
  • 很难说没有关于您的文件的任何信息......但错误意味着您正在为 data.frame 分配一个变量,该变量的观察值比 df 的行数多或少。跨度>
  • @Val 我没有为数据框设置行号 - 由于错误,使用 data.frame() 只是我尝试的解决方法:“complete.cases(x) 中的错误:参数的“类型”(列表)无效”
  • a data.frame 传统上每个变量(列)有多个观察值(行)。您无需在此处设置任何内容。但是,如果您尝试添加到 data.frame,则需要一个适合 data.frame 尺寸的变量

标签: r dataframe


【解决方案1】:

这可能有助于得到你所追求的

complete <- function(directory){
  # Get list of csv files in directory
  filelist <- list.files(directory, pattern = ".csv", full.names = TRUE)

  # Get a list of dataframes for all csv files in the directory
  list.df <- lapply(filelist, function(x){read.csv(x, header = TRUE)})

  # Get a list of complete rows for each dataframe in the list
  complete.casesums <- lapply(list.df, function(x) sum(complete.cases(x)))

  # Get a list of incomplete rows for each dataframe in the list
  incomplete.casesums <- lapply(list.df, function(x) sum(!complete.cases(x)))

  # Create a dataframe with the filename, number of complete rows, and number of incomplete rows
  df <- data.frame(cbind(filelist, complete.casesums, incomplete.casesums), stringsAsFactors = FALSE)

  # Return the dataframe
  return(df)
}

# Call the function
(df <- complete("C:/Path/To/Folder"))

【讨论】:

  • 嗨,马特,谢谢 - 我会尝试这种方法。我需要使用第二个参数使称为可修改的文件,但这应该不会太难......
猜你喜欢
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2014-06-26
  • 2013-12-19
  • 1970-01-01
相关资源
最近更新 更多