दी गई स्क्रिप्ट दी गई स्थिति के आधार पर आईरिस डेटा को आर में सबसेट करती है। हालांकि, जब इसे बहुत बड़े डेटा जैसे 10 मिलियन+ पर लागू किया जाता है, तो समाधान टॉस के लिए जाता है। कृपया कम समय में समान परिणाम प्राप्त करने के तेज़ तरीके से मेरी सहायता करें। धन्यवाद।

iris1 <- subset(iris,iris$Sepal.Length<=5 & iris$Sepal.Length >= 3)
0
Adam Shaw 14 जिंदा 2018, 17:51

3 जवाब

सबसे बढ़िया उत्तर

क्या आपने data.table पहले ही कोशिश कर ली है?

ऐसा करने का एक मानक तरीका होगा:

library(data.table)
iris <- iris
setDT(iris)
# you could try here "setkey(iris, Sepal.Length)" but shouldn't matter
iris1 <- iris[Sepal.Length %between% c(3, 5)]
2
sindri_baldur 14 जिंदा 2018, 17:56

मैंने तीन अंतर दृष्टिकोणों का उपयोग करके सबसेट की तुलना करने के लिए निम्नलिखित बेंचमार्किंग आयोजित की है: आधार आर से subset फ़ंक्शन, dplyr, और data.table 10000050 पंक्तियों के साथ एक उदाहरण डेटा फ्रेम के आधार पर। परिणाम से पता चलता है कि data.table सबसे तेज है।

library(dplyr)
library(data.table)
library(microbenchmark)

# Create example data frame with 10000050 rows
dat <- iris[rep(1:150, times = 66667), ]

# Create example tibble
dat_tbl <- as_tibble(dat)

# Create example data.table
dat_dt <- as.data.table(dat)

# Conduct benchmarking
per <- microbenchmark(# Method 1: The base R subset function
                      m1 = {subset(dat, Sepal.Length <= 5 & Sepal.Length >= 3)},
                      # Method 2: The dplyr method
                      m2 = {dat_tbl %>% filter(Sepal.Length <= 5, Sepal.Length >= 3)},
                      # Method 3: The data.table method
                      m3 = {dat_dt[Sepal.Length %between% c(3, 5), ]}, times = 1000L)

per
# Unit: milliseconds
# expr       min        lq     mean    median        uq      max neval
#   m1 381.17382 776.68467 961.2284 849.74441 1144.4295 2384.084  1000
#   m2 115.79736 137.92646 295.3928 146.91114  511.5023 1452.713  1000
#   m3  50.05212  63.57618 201.6751  70.98142  413.5645 1227.321  1000

# Plot the result
library(ggplot2)
autoplot(per)

enter image description here

2
www 14 जिंदा 2018, 18:42

डेटा फ़्रेम को सब्मिट करने का सबसे तेज़ तरीका निश्चित रूप से -data.table- पैकेज का उपयोग करके इसे डेटा तालिका में परिवर्तित करना है।

# Load -data.table- package
library(data.table)

# Convert iris to a data table
dt <- as.data.table(iris)

# Subset data table using conditions on Sepal.Length
dt1 <- dt[Sepal.Length<=5 & Sepal.Length >= 3]
0
Kenneth Rios 14 जिंदा 2018, 18:49