gpt4 book ai didi

r - 在 R 中对数据帧的行进行子集化的更快方法?

转载 作者:行者123 更新时间:2023-12-01 19:56:53 24 4
gpt4 key购买 nike

我一直交替使用这两种方法来从 R 中的数据帧中提取数据子集。
方法一
subset_df <- df[which(df$age>5) , ]
方法二
subset_df <- subset(df, age>5)

我有 2 个属于这些的问题。
1. 考虑到我的数据量很大,哪一个更快?
2.这篇文章在这里Subsetting data frames in R表明上述两种方法实际上存在差异。其中之一可以准确地处理 NA。那么哪一个可以安全使用呢?

最佳答案

该问题要求一种更快的方法来对数据帧的行进行子集化。最快的方法是使用 data.table。

set.seed(1)  # for reproducible example
# 1 million rows - big enough?
df <- data.frame(age=sample(1:65,1e6,replace=TRUE),x=rnorm(1e6),y=rpois(1e6,25))

library(microbenchmark)
microbenchmark(result<-df[which(df$age>5),],
result<-subset(df, age>5),
result<-df[df$age>5,],
times=10)
# Unit: milliseconds
# expr min lq median uq max neval
# result <- df[which(df$age > 5), ] 77.01055 80.62678 81.43786 133.7753 145.4756 10
# result <- subset(df, age > 5) 190.89829 193.04221 197.49973 203.7571 263.7738 10
# result <- df[df$age > 5, ] 169.85649 171.02084 176.47480 185.9394 191.2803 10

library(data.table)
DT <- as.data.table(df) # data.table
microbenchmark(DT[age > 5],times=10)
# Unit: milliseconds
# expr min lq median uq max neval
# DT[age > 5] 29.49726 29.93907 30.1813 30.67168 32.81204 10

因此,在这个简单的情况下,data.table 的速度比 which(...) 快两倍多,比 subset(...) 快 6 倍多.

关于r - 在 R 中对数据帧的行进行子集化的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com