在数据帧R中循环时效率低

在数据帧R中循环时效率低,r,loops,for-loop,R,Loops,For Loop,我使用下面的代码将月份名称映射到数字,我发现与没有for循环的其他数据帧计算相比,它的效率很低 Sys.time() head(df[,4]) for (i in 1:nrow(df)){ df$monthnum[i]<-match(tolower(as.character(df[i,4])), tolower(month.name)) } Sys.time() Sys.time() 头部(df[,4]) 适用于(i/1:nrow(df)){ df$monthnum[i]系统时间()

我使用下面的代码将月份名称映射到数字,我发现与没有for循环的其他数据帧计算相比,它的效率很低

Sys.time()
head(df[,4])
for (i in 1:nrow(df)){
  df$monthnum[i]<-match(tolower(as.character(df[i,4])), tolower(month.name))
}
Sys.time()
Sys.time()
头部(df[,4])
适用于(i/1:nrow(df)){
df$monthnum[i]系统时间()
[1] “2016-03-07 19:20:53 CST”
>dim(df)
[1] 229464      6
>头部(df[,4])
[1] 一月一月一月
水平:4月8月12月2月1月7月6月3月5月11月10月9日
>适用于(i/1:nrow(df)){
+df$monthnum[i]系统时间()
[1] “2016-03-07 19:23:23 CST”

任何人都可以使用数据帧中for循环的逻辑。任何信息都将受到欢迎。

使用
sapply
功能。 首先,创建您的函数:

my_function = function(my_month){
  match(tolower(as.character(my_month)), tolower(month.name))
}
然后使用
sapply

sapply(df[,4],my_function)

也许有助于解释为什么数据帧循环效率如此之低。您的代码只是
df$monthnum,它很有帮助,只需几秒钟即可完成,数据帧中的循环是否增加了复杂性。对不起,我没有收到您评论的第二部分。如果这解决了您的问题,您可以单击勾选它作为答案。
sapply(df[,4],my_function)