我有一个包含三列的数据框(username, IP_Address, IP_type
。
IP_Address
列具有一些NA
值。
对于IP_Address
中的每一行,如果值是NA
,我想从列username
中复制相应的值。
我正在使用以下代码,但运行速度非常慢。我有23万行数据,但一小时后才中途通过。
为什么会很慢?我怎样才能更有效地做到这一点?
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]
}
}
R是一种解释型语言,因此矢量化操作几乎总是比涉及循环的操作快。
查找地址中具有NA的索引(行),然后仅分配那些值:
na_address <- which(is.na(log_data$IP_address))
log_data$IP_address[na_address] <- log_data$user_name[na_address]