r - 如何更快地在两个向量之间复制数据?
问题描述
我有一个包含 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]
}
}
解决方案
R 是一种解释性语言,因此向量化操作几乎总是比涉及循环的操作快。
查找地址中具有 NA 的索引(行),然后仅分配这些值:
na_address <- which(is.na(log_data$IP_address))
log_data$IP_address[na_address] <- log_data$user_name[na_address]
推荐阅读
- python - 是否可以使用 Spark 从 Kubernetes 之外的外部 HBase 集群中读取数据进行处理?
- javascript - 向左移位在这里完成了什么?
- python - 使用已编译 python 中的值
- reactjs - 在不使用 react-apollo 的情况下应用 appsync 订阅的优化方法是什么?
- linux - SSH 后 shell 脚本停止(登录到 kubernetes pod)
- android - 对“jniRegisterNativeMethods”Android NDK 的未定义引用
- ruby-on-rails - NoMethodError(nil:NilClass 的未定义方法 `posts'):
- mysql - 姜戈。我如何获得重复的用户列表?
- javascript - 如何调用一组对象中同一列的属性?(Node.js)
- ios - 协议实现方法不在 Swift 中调用