R sapply函数从命名向量中的值填充数据帧的一列需要很长时间。有没有更快的办法?

R sapply函数从命名向量中的值填充数据帧的一列需要很长时间。有没有更快的办法?,r,dataframe,R,Dataframe,这是我正在做的一个例子 x <- c(a="2",b="4",c="2",d="9") df <- data.frame(names = c("d","c","a","b")) 这段代码在这个玩具示例中运行得很好,但我使用的是一个超过150000行的数据帧,这花费了相当长的时间。sapply这样做是不是很慢?df$vals很棒。我的方法这么慢有什么原因吗?哇,我刚刚运行了这段代码,它几乎是瞬间的。我的代码实际上慢得难以管理。match就是为了这个目的而设计的sapply将产生开销。

这是我正在做的一个例子

x <- c(a="2",b="4",c="2",d="9")
df <- data.frame(names = c("d","c","a","b"))

这段代码在这个玩具示例中运行得很好,但我使用的是一个超过150000行的数据帧,这花费了相当长的时间。
sapply
这样做是不是很慢?

df$vals很棒。我的方法这么慢有什么原因吗?哇,我刚刚运行了这段代码,它几乎是瞬间的。我的代码实际上慢得难以管理。
match
就是为了这个目的而设计的<代码>sapply
将产生开销。(好吧,apply family命令是循环的方便替代品,使R更像一个交互式命令行探索工具,而不仅仅是一种编程语言。)@crf是的,我记得当我发现它时,我也有同样的想法。:)您的数据帧可能与
x
名称的顺序不完全相反:-(…和所有
x
名称都存在于数据框中。所有
x
名称都存在于数据框中。为了提供更多上下文,通过各种其他过程生成了
igraph
图,其中
df$names
中的每个条目都是图中的顶点。
x
是所有垂直度的向量s、 顶点的名称是保留的,但我不知道在
igraph
中顶点的顺序是如何确定的,这可能是某种黑魔法。因此,现在我在
igraph
图中取顶点的度数,并将它们放回数据框中。
df$vals <- x[match(df$names, names(x))]
df$vals <- x[match(df$names, names(x))]