在R中,如何用apply函数替换for循环?

在R中,如何用apply函数替换for循环?,r,R,我正在尝试应用一个适用于数据帧的每一行的操作。下面是代码 for(i in 1:nrow(df)){ df$final[i] <- alignfile[alignfile$Response == df$value[i],]$Aligned } 它基本上是从alignfile数据帧执行vlookup,并使用数据帧df中成功的值列vlookup生成一个新列 我如何用apply函数族替换这个操作,这样我就可以摆脱使它变慢的for循环 寻找建议。请随时为更多的澄清 谢谢你没有提供

我正在尝试应用一个适用于数据帧的每一行的操作。下面是代码

  for(i in 1:nrow(df)){
    df$final[i] <- alignfile[alignfile$Response == df$value[i],]$Aligned
  }
它基本上是从alignfile数据帧执行vlookup,并使用数据帧df中成功的值列vlookup生成一个新列

我如何用apply函数族替换这个操作,这样我就可以摆脱使它变慢的for循环

寻找建议。请随时为更多的澄清


谢谢

你没有提供一个可复制的例子,所以请恕我直言, 我认为在这种情况下,您根本不需要使用for循环,就像在大多数情况下使用R和apply函数一样。我认为使用ifelse可以通过以下方式轻松解决此问题:

df$final <- ifelse(alignfile$Response==df$value, 1, 0)

如果alignfile$Response列当前单元格中的值等于df$value列中当前单元格的值,则这将在df dataframe的最后一列中放置一个值。这假设alignfile和df的行数与您提供的代码中显示的行数相同。

您要查找findInterval吗?最终df$final No,我希望创建一个新列,它将df的value列的值与alignfile的aligned列相匹配。基本上是vlookup。请给出一个,即编辑您的问题:在当前状态下阅读您的问题与SO无关。alignfile$Aligned[findIntervaldf$value,alignfile$Response]请阅读函数findInterval的文档以了解更多信息。下面是一个示例:SLclass IMHO df和alignfile具有不同的行数。因此你的==将不起作用。IDK,可能是,但是他的for循环在理论上也不起作用,因为它对df和alignfile使用相同的索引。OP在对问题的评论中写道:它基本上是vlookup。那么你认为他想检查df的每一行是否有相同的alignfile值?那我想这是greplHi的工作谢谢你的讨论。问题解决了。