当前位置: 首页 > 知识库问答 >
问题:

如何在R中对多个数据集应用同一函数

何涵畅
2023-03-14
 df1 <- data.frame(x = rep(3, 5), y = seq(1, 5, 1), ID = letters[1:5])
 df2 <- data.frame(x = rep(5, 5), y = seq(2, 6, 1), ID = letters[6:10])
#I define a function:
PasteTwoColumn <- function(x) 
{
  x$col2_col3 <- paste(x[,2], x[,3], sep = "_")
  return(x)
}
#apply the function to the df1, it works.
df1 <- PasteTwoColumn(df1)
# but I failed by an lappy function, because it returns a list, not the dataframe
mylist <- list(df1, df2) 
result <- lapply(mylist, PasteTwoColumn)

我想继续将此函数应用于我的所有数据页,例如。df1,df2,df3...DF100。输出文件应保持相同的dataframe类型和名称。

lapply函数不起作用,因为它返回一个列表,而不是单独的数据帧。

共有1个答案

朱炜
2023-03-14

我们可以将数据集保存在列表中,并使用lapply列表上循环

lst1 <- lapply(list(df1, df2), PasteTwoColumn)

如果有许多数据集,请使用mget将数据集的值获取到列表

lst1 <- lapply(mget(paste0('df', 1:100)), PasteTwoColumn)

或者,我们也可以使用ls代替粘贴

lst1 <- lapply(mget(ls(pattern = '^df\\d+$')), PasteTwoColumn)
list2env(lst1, .GlobalEnv) #not recommended though
for(obj in paste0("df", 1:100)) {
      assign(obj,  PasteTwoColumn(get(obj)))
  }
 类似资料:
  • 我想为不同的df-id应用一个函数,如果下一行不同于前一行,则返回1,否则返回0。 我完全不知道我该如何实现这一目标,无论如何都可以完成它吗? 数据结构如下: 预期输出应如下所示:

  • 我需要对R中数据帧每行的数据进行卡方检验。到目前为止,我有一个函数可以创建矩阵并对矩阵进行检验。当我手动将数据输入函数时,这工作得很好。 但是,我想做的是将此函数应用于数据框的每一行,使得 var1 是行 x 列 1,var2 是行 x 列 2,var3 是行 x 列 3,var4 是行 x 列 4。 我已经尝试了几种不同的应用程序()函数的方法,但是我找不到一种允许我按照我想要的方式从行中获取数

  • 这个问题和这个问题类似:R:两个/多个具有相同变量(列名)的数据帧的Sum列式值,并且以Date列作为引用,但是我的DF有不同的列数、列名,并且没有一个特定的引用列。 我试过合并、加入、通过...等

  • 类型异常报告 消息请求处理失败;嵌套异常是java.lang.NullPointerException 说明服务器遇到内部错误,导致它无法完成此请求。 例外情况 org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.nullpointerexception org.springframework.web.

  • 我经常处理格式不好的数据(即数字字段不一致等) 可能还有其他方法,我不知道,但我格式化数据帧中单个列的方法是使用函数并将该列映射到该函数。 问题:1-如果我有一个包含50列的数据框,并且想要将该格式应用于多个列,等等列1, 3, 5, 7, 9, 你能去吗 ...这样我可以格式化所有的数字列在一行?

  • 文档显示了如何使用以输出列名为键的dict一次对groupby对象应用多个函数: 但是,这只对Series groupby对象有效。并且当类似地将dict传递给groupby数据帧时,它希望键是将应用该函数的列名。 我想做的是对几个列应用多个函数(但某些列将被多次操作)。此外,一些函数将依赖于groupby对象中的其他列(如sumif函数)。我当前的解决方案是逐列执行,并执行与上面的代码类似的操作