首页 > 解决方案 > 如何更快地在两个向量之间复制数据?

问题描述

我有一个包含 3 列 ( username, IP_Address, IP_type) 的数据框。

该列IP_Address有一些NA值。

对于 中的每一行IP_Address,如果值为NA,我想从列中复制相应的值,username

我正在使用以下代码,但运行速度非常慢。我有 230,000 行数据,但一小时后它只完成了一半。

为什么它很慢?我怎样才能更有效地做到这一点?

for (i in 1:length(log_data$IP_type)) {
   if (is.na(log_data$IP_address[i]) == TRUE ){
       log_data$IP_address[i] <- log_data$user_name[i]  
   }
}

标签: rloopsfor-loopmultiple-columnsna

解决方案


R 是一种解释性语言,因此向量化操作几乎总是比涉及循环的操作快。

查找地址中具有 NA 的索引(行),然后仅分配这些值:

na_address <- which(is.na(log_data$IP_address))
log_data$IP_address[na_address] <- log_data$user_name[na_address]

推荐阅读