使用R在两个Dataframe中的每个元素上应用函数

时间:2016-09-23 13:44:21

标签: r loops dataframe sequence apply

如何在两个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 <- seq(DF1, DF2, 0.01)。但是这样做是行不通的,因为seq(from,to)的论点必须是长度为1.

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

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

1 个答案:

答案 0 :(得分:0)

我不确定你试图在元素上应用什么函数,但我已经使用了sweep()函数来处理类似的事情。例如:

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

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