首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算一系列csv文件的行数

计算一系列csv文件的行数
EN

Stack Overflow用户
提问于 2013-01-16 20:36:02
回答 4查看 27.2K关注 0票数 6

我正在学习一个R教程,我怀疑我必须使用这些函数中的一个,但我不确定是哪个(是的,我研究过它们,但在我对R术语变得更加流利之前,它们是相当令人困惑的)。

在我的工作目录中有一个文件夹"specdata“。Specdata包含数百个名为001.csv - 300.csv的CSV文件。

我正在使用的函数必须计算输入数量的csv文件的总行数。因此,如果函数中的参数是1:10,并且每个文件都有10行,则返回100。

这是我到目前为止所知道的:

代码语言:javascript
运行
复制
complete <- function(directory,id = 1:332) {
    setpath <- paste("/Users/gcameron/Desktop",directory,sep="/")
    setwd(setpath)
    csvfile <- sprintf("%03d.csv", id)
    file <- read.csv(csvfile)
    nrow(file)
 }

当ID参数是一个数字时,这是可行的,比如17。但是,如果我输入10:50作为参数,我会收到一个错误:

代码语言:javascript
运行
复制
Error in file(file, "rt") : invalid 'description' argument

我应该怎么做才能从输入的ID参数中计算出总行数?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-16 20:44:31

read.csv期望只读取一个文件,所以您需要循环遍历文件,一种R惯用的方法是使用sapply

代码语言:javascript
运行
复制
nrows <- sapply( csvfile, function(f) nrow(read.csv(f)) )
sum(nrows)

例如,以下是complete函数的重写:

代码语言:javascript
运行
复制
complete <- function(directory,id = 1:332) {
    csvfiles <- sprintf("/Users/gcameron/Desktop/%s/%03d.csv", directory, id)
    nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)) )
    sum(nrows)
}
票数 9
EN

Stack Overflow用户

发布于 2013-01-16 20:47:47

家庭作业问题通常是这样标记的,尽管我不知道这是否是必需的,但这显然是家庭作业。

您编写的函数期望id不是向量(尽管默认值是整数的向量)。

将其更改为使用*apply函数之一(更简洁、更常见),或者甚至使用显式循环。对于id向量中的每个元素,必须调用一个函数来打开该文件并计算观测值。

This stackoverflow post很好地解释了*apply函数之间的差异。

票数 1
EN

Stack Overflow用户

发布于 2020-11-09 21:52:20

代码语言:javascript
运行
复制
id <-c(1:332)
filenames=list.files(path="source_path", full.names=TRUE)

for(a in id){

    dataset <- read.csv(filenames[a])

    res <- nrow(na.exclude(dataset))  #nrow count the row of the dataset
    
    df <-data.frame(
    id =a,
    nobs =res,  
    stringsAsFactors=FALSE)
}   

df
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14358629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档