R 如何在与列相关的情况下使用Apply函数?

R 如何在与列相关的情况下使用Apply函数?,r,R,我试图在一个700k记录的df中填充一个新列,它在for循环中运行得太慢,因此希望使用apply函数。不熟悉它,下面是我的尝试,但这不起作用。请帮忙 myfunc <- function(a,b,c,d) {if (a=="xyz" & b==11) {c=d}} dataf[,'target'] <- apply(dataf, 1, function(dataf) myfunc(dataf[,'col1'],dataf[,'col2'],dataf[,'target'],d

我试图在一个700k记录的df中填充一个新列,它在for循环中运行得太慢,因此希望使用apply函数。不熟悉它,下面是我的尝试,但这不起作用。请帮忙

myfunc <- function(a,b,c,d) {if (a=="xyz" & b==11) {c=d}}
dataf[,'target'] <- apply(dataf, 1, function(dataf) myfunc(dataf[,'col1'],dataf[,'col2'],dataf[,'target'],dataf[,'col3']))
我想要达到的目标:

a   b   c   d
x   2       p
x   2       p
x   2       p
xyz 11  p   p
xyz 11  p   p
xyz 2       p
y   2       p
y   2       p
y   2       p

考虑到你的行动,我猜你想要这个

library(data.table)
setDT(dataf)[a == "xyz" & b == 11, c := d]
输出:

     a  b d  c
1:   x  2 p NA
2:   x  2 p NA
3:   x  2 p NA
4: xyz 11 p  p
5: xyz 11 p  p
6: xyz  2 p NA
7:   y  2 p NA
8:   y  2 p NA
9:   y  2 p NA

我强烈建议您阅读data.table的内容,它速度非常快,可以用于很多不同的事情。在这个网站上你可以找到更多。我会把它们都读一遍,你会需要所有这些,它会帮你很多

请提供一个可复制的例子,准确地告诉我们你想要什么:只是一个简单的玩具例子,它类似于你的大问题;看起来您所做的事情根本不需要函数,只需要简单的子集即可完成,比如:
library(data.table)setDT(dataf)[col1==“xyz&col2==11,target:=col3]
这将使一切都变得更快;请参阅此数据简介。表:我添加了示例。此外,我将您的建议用于setDT。它工作得非常快。但是,我的目标是:=粘贴(“x”,col3,sep=”“)它同时更新了target和col3,正确的方法应该是什么?谢谢!我在这个例子中尝试了这个方法,而另一个例子中它似乎没有完全按照预期工作。我做了c:=粘贴(“x”,d,sep=”“)它用新的值更新了c和d,正确的方法应该是什么?另外,数据的速度给我留下了深刻的印象。table,我今天晚些时候将学习它。如果没有看到一些示例数据,很难判断,我想在阅读了更多关于数据的内容后,您可以回答自己的问题。table,您打算在那里做什么?如果您想将c设置为“x”而不仅仅是键入
c:=“x”
;此外,如果这回答了您的问题,请单击箭头接受答案并向上投票,这确实会根据我的问题回答我的问题。然而,我想知道为什么当我稍微调整它时,同样的情况不会发生。代替c:=d,我做了c:=paste(“x”,d,sep=“”),即我尝试做c=d,并且在条件为真时连接和“x”。当我这样做的时候,它也更新了dhmm专栏,这将是一个很好的新问题:),老实说,我不知道
     a  b d  c
1:   x  2 p NA
2:   x  2 p NA
3:   x  2 p NA
4: xyz 11 p  p
5: xyz 11 p  p
6: xyz  2 p NA
7:   y  2 p NA
8:   y  2 p NA
9:   y  2 p NA