【问题标题】:R-project data frame returning too many columnsR-project 数据框返回太多列
【发布时间】:2013-01-16 21:19:54
【问题描述】:

完成我很难理解的 R 教程。

目录是一个包含大量 csv 文件的文件夹。该函数将多个文件中的一个作为 id,并返回每个文件中的记录数。

我的功能:

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

   csvfiles <- sprintf("/Users/myname/Desktop/%s/%03d.csv", directory, id)

   nrows <- sapply( csvfiles, function(f) nrow(read.csv(f)))
   data.frame(ID=sprintf('%03d', id), 
              countrows=sapply(csvfiles,function(x) length(count.fields(x))),
             row.names=id
           )
       }

然后完成("specdata", 100:105) 返回

    ID countrows
100 100      1097
101 101       731
102 102      1462
103 103      3653
104 104      2558
105 105      2192

我必须怎么做才能使最左边的列是从 1 开始的序列?因此,例如,第一条记录是 1 100 和 1092,第二条记录是 2 101 和 731

【问题讨论】:

  • 您的数据框只有两列。您的第一个“列”实际上只是行名。您可以使用 rownames(specdata) &lt;- 1:5 更改此设置
  • 您也在函数中明确设置行名 - 删除此行:row.names=id
  • @thelatemail 我做了,但随后得到了完整的目录,如下所示: id nobs /Users/myname/Desktop/specdata/100.csv 100 1097 /Users/myname/Desktop/specdata/101.csv 101 731等

标签: r function dataframe


【解决方案1】:

第一个明显的列只是行的名称(例如ncol(specdata))。您可以按如下方式重命名行:

row.names(specdata) <- 1:nrow(specdata)

【讨论】:

  • 迈克尔谢谢,但这似乎不起作用。我应该如何整合它?
  • @DougFirr 将complete 的结果保存到变量中,例如specdata,然后运行Michael 建议的行。只需输入rownames(specdata)(我通常使用此功能,而不是row.names),您应该会看到所有行名。通过为它分配一些东西,你正在有效地改变它。如果您分配NULL,您将删除行名。
【解决方案2】:

在函数内部,在数据框调用中使用 this:

row.names = 1: length(id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多