lapply和dplyr组合来处理嵌套数据帧

时间:2015-08-05 06:11:10

标签: r dplyr lapply

我的文件夹目录中有一个数据框列表,我想处理这些数据框以进行分析。我首先使用lapply函数内部读取它们,然后我想处理它的列并通过分组对它进行排序。因此,大多数情况下我需要结合使用dplyrlapply函数来更快地处理数据。 我浏览了网页并检查了一些书籍,但大多数例子很简单,并没有涵盖这两个功能的组合。

以下是我使用的示例代码:

files <- mixedsort(dir(pattern = "*.txt",full.names = FALSE)) # to read data

data <-  lapply(files,function(x){
tmp <- read.table(file=x, fill=T, sep = "\t", dec=".", header=F,stringsAsFactors=F)
df <- tmp [!grepl(c("AC"),tmp $V1),]
new.df <- select(df, V1:V26)
new.df <- apply(new.df, function(x){ x[11:26] <- x[11:26]/10000;x })

我收到以下错误:

  

match.fun(FUN)中的错误:参数&#34; FUN&#34;缺少,没有默认

这是可重复的示例,看起来像我的数据。假设我想要处理dat的第2和第3列,并按let列进行分组。当我尝试在上面的fun代码中放​​置data命令时,我得到了错误。任何指导将不胜感激。

dat <- lapply(1:3, function(x)data.frame(let=sample(letters,4),a=sort(runif(20,0,10000),decreasing=TRUE), b=sort(runif(20,0,10000),decreasing=TRUE), c=rnorm(20),d=rnorm(20)))

fun <- lapply(dat, function(x){x[2:3] <-x[2:3] /10000; x})

1 个答案:

答案 0 :(得分:3)

如您对问题的评论中所述,apply函数导致错误。但是我不认为apply是你想要的,因为它聚合了你的数据帧。

使用dplyr-syntax可以解决问题:

tmp %>%
  filter(!grepl("AC",V1)) %>%
  select(V1:V26) %>%
  mutate_each(funs(./1000), V11:V26)