【问题标题】:Apply a function to multiple datasets using lapply使用 lapply 将函数应用于多个数据集
【发布时间】:2019-09-08 18:10:23
【问题描述】:

我有大量数据集,我想为其创建相同的变量。我想创建一个函数以避免多次重复相同的代码。

我尝试了下面的代码:前 3 行描述了我试图通过下面创建的函数应用的变量的创建。

data1 <- data1 %>%
  dplyr::group_by(id)%>%
  dplyr::mutate(new_var = sum(score))


list_data <- c(data1, data2, data3)
my_func <- function(x) {
  x <- x %>%
  dplyr::group_by(id) %>%
  dplyr::mutate(new_var = sum(score))
}

lapply(list_data, my_func)

我得到错误信息

没有适用于类对象的“group_by”方法 “性格”。

你能帮我解决这个问题吗?

【问题讨论】:

  • 你的函数没有使用参数x
  • 此外,您在group_by() 之后缺少一个点符号(%&gt;%
  • 另外,我认为使用c( 会连接所有数据,而不是列出数据结构。尝试改用list_data &lt;- list(data1, data2, data3)
  • 糟糕的是,这些都是拼写错误,我确实运行了代码的编辑版本。 @RomainB。我确实尝试过,但它并没有改变结果。
  • @unisateur 这取决于你的数据结构,但如果你特别想要任何对象的 list,使用list 会更安全,因为它总是会以这种方式运行。举个例子,如果 data1、2 和 3 是数据帧,那么 c( 函数将列出一个包含所有列的大列表,而不是像 list 那样包含 3 个数据帧的列表。

标签: r dataframe dplyr dataset lapply


【解决方案1】:

对我来说这很好用:

my_func <- function(x) {
  x <- x %>%
    dplyr::group_by(id) %>%
    dplyr::mutate(new_var = sum(score))
}
data1 <- data.frame(id = rep(1:3, each = 3), score = 1:9)
data2 <- data.frame(id = rep(1:3, each = 3), score = 11:19)
data3 <- data.frame(id = rep(1:3, each = 3), score = 21:29)


list_data <- list(data1, data2, data3)
lapply(list_data, my_func)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2018-02-27
    • 2015-12-26
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多