【问题标题】:lapply and dplyr combination to process nested data frameslapply 和 dplyr 组合处理嵌套数据帧
【发布时间】:2015-08-05 06:11:09
【问题描述】:

我的文件夹目录中有一个数据框列表,我想对其进行处理以进行分析。我首先使用 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) 中的错误:缺少参数“FUN”,没有默认值

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

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})

【问题讨论】:

  • apply 函数的格式为apply(X, MARGIN, FUN, ...),其中MARGIN1(行)或2(列)。您在 apply 函数中缺少 margin 部分。
  • @Jaap 好的,我将 2 放在 new.df 之后,但出现错误“x[11:26]/10000 中的错误:二进制运算符的非数字参数”

标签: r dplyr lapply


【解决方案1】:

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

只使用 dplyr-syntax 你的问题可以这样解决:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2019-12-27
    • 1970-01-01
    • 2020-09-28
    • 2019-08-14
    相关资源
    最近更新 更多