【问题标题】:Producing a frequency table dataframe from a folder of txt files从 txt 文件的文件夹中生成频率表数据框
【发布时间】:2015-05-19 01:56:21
【问题描述】:

我试图基本上将一个频率表从文件夹中的单个文本文件中的列转换为一个漂亮的数据框。

我有一个包含 1000 个文件的文件夹。 1000 个文本文件中的每一个都是 tab-del UTF-8(或者他们说,编码一直是个问题),有 61 列和 35-500 不等的行数。

在每个文件中,第 43 列是一年。我想要的最终状态是一个数据框,其中每一年都有一列出现在数据集中,1000 个文件中的每一个都有一行,并且该年在每个单元格中的该文件中出现的总次数(换句话说,每年出现在第 43 列的次数)

我有这个功能:

  findCY<-function(savedfile){
  text <- read.delim(savedfile, header=FALSE, sep="\t",colClasses=mycolClasses, quote="", na.strings="", encoding="UTF-8-BOM")
  cyvec<- as.numeric(text$V43[2:(length(text$V43))])
  cyvec<- sort(cyvec, decreasing=FALSE)
  labelcyvec<-c(savedfile,cyvec)
  return(labelcyvec)
}

在哪里

mycolClasses<-c("character", rep("NULL",29),"character",rep("NULL",11),"character",rep("NULL",18))

还有一个带有文件名的字符向量 - 称为文件名。我试着这样打电话:

test<- ldply(filenames[600:605], findCY)

然后我融化并重铸,得到了一个漂亮的 data.frame:

test.melt<-melt(test,id.vars="V1")
test.cast<-dcast(test.melt, V1~value, fun.aggregate=length)

它适用于第 600-605 行,但是当我尝试整个过程,甚至是任何其他子集时,我从 ldply 步骤中得到以下错误:

list_to_dataframe(res, attr(.data, "split_labels"), .id, 中的错误 id_as_factor) : 结果的长度不相等

我知道各个文件的年份覆盖率或行数不同,我认为这可能是问题所在。

有更好的方法吗?

【问题讨论】:

  • lapply代替ldply怎么样?还是错误?
  • 我可以使用 lapply 来获取列表。我现在正在看。我也从这里尝试了一些东西:stackoverflow.com/questions/9250344/… 没有运气

标签: r plyr


【解决方案1】:

将函数更改为输出数据帧列表并使用 lapply 确实有效,然后不需要 melt,只需强制转换:

findCY<-function(savedfile){
  text <- read.delim(savedfile, header=FALSE, sep="\t",colClasses=mycolClasses, quote="", na.strings="", encoding="UTF-8-BOM")
  cyvec<- as.numeric(text$V43[2:(length(text$V43))])
  cyvec<- sort(cyvec, decreasing=FALSE)
  labelcyvec<-data.frame(savedfile,cyvec)
  print(c(savedfile,"ok"))
  return(labelcyvec)
}

CYall<- ldply(filenames, findCY)
CYall.cast<- dcast(CYall, savedfile~cyvec, fun.aggregate=length)

现在我完全糊涂了,因为显然我确实使用了 ldply - 但它奏效了!

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多