【问题标题】:Apply function on each element in two Dataframes using R使用 R 对两个 Dataframe 中的每个元素应用函数
【发布时间】:2016-09-23 13:44:20
【问题描述】:

如何对两个 Dataframe 上的每个元素应用函数?

在以下示例中,我想防止双 for 循环:

for(m in 1:nrow(DF1)) {

  for(n in 1:ncol(DF1)) {

    mySeq <- seq(DF1[m,n], DF2[m,n], 0.01)

    # Do the rest with mySeq  ... 

  }
} 

我的目的是在具有相同索引的两个数据帧的每个元素之间创建序列。

可能最快的解决方案和第一个想法是mySeq &lt;- seq(DF1, DF2, 0.01)。但这不起作用,因为seq(from,to) 的参数长度必须为 1。

我的第二次尝试是使用apply()。这不起作用,因为它仅适用于一个数据帧。然后我搜索了一个合适的应用解决方案,找到了mapply()。使用 mapply 可以应用于两个数据帧,但不可能应用于数据帧中的每个元素,而是应用于 da 数据帧的行。而且我不想使用嵌套的 apply() 调用。

所以我的问题是如何在不使用双 for 循环或嵌套应用的情况下编写上面显示的示例?

【问题讨论】:

  • 如果您提供 reproducible example 并提供示例输入和所需输出,会更容易提供帮助。
  • 可能你可以在两个data.frames上使用unlist然后mapply
  • unlist 已经使用 mapply() 完成了这项工作。谢谢!

标签: r loops dataframe sequence apply


【解决方案1】:

我不确定您要在元素上应用什么函数,但我过去曾将 sweep() 函数用于类似的事情。例如:

df = data.frame(x = 1:10, y = 1:10, z = 1:10)
sweep(df, 1:2, 1)

这里扫描遍历 df 的每个元素并减去 1,但您可以指定自己的函数来对元素进行操作。然后您可以将您的 2 个数据帧绑定在一起并使用 sweep() 或单独应用它。

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多