Произвольная выборка строк из определенных месяцев в наборе данных - PullRequest
0 голосов
/ 13 января 2020

Мне было дано задание в R:

"Произвольно выбрать 10 торговых дней из каждого из следующих месяцев: с января 2019 года по июнь 2019 года (всего за 6 месяцев)".

У меня есть CSV-файл истории торговли акциями компании за последние 5 лет (даты, цена открытия, цена закрытия, изменения и т. Д. c.), Которые я импортировал в R с использованием этого кода (чтение файла; установка формата даты; извлечение всех 6 соответствующих месяцев):

SHAPIRENG5YEARS <- read.csv(file="C:\\Users\\Ron\\OneDrive\\5year.csv", header=TRUE, sep=",") #Choosing Shapir Engineering stock (last 5 years)
SHAPIRENG5YEARS$Date = as.Date(as.character(SHAPIRENG5YEARS$Date), format = "%d/%m/%Y")
January19=SHAPIRENG5YEARS[(SHAPIRENG5YEARS$Date > "2019-01-01" & SHAPIRENG5YEARS$Date < " 2019-01-31" ) ,]
February19=SHAPIRENG5YEARS[(SHAPIRENG5YEARS$Date > "2019-02-03" & SHAPIRENG5YEARS$Date < " 2019-02-28" ) ,]
March19=SHAPIRENG5YEARS[(SHAPIRENG5YEARS$Date > "2019-03-09" & SHAPIRENG5YEARS$Date < " 2019-03-31" ) ,]
April19=SHAPIRENG5YEARS[(SHAPIRENG5YEARS$Date > "2019-04-01" & SHAPIRENG5YEARS$Date < " 2019-04-30" ) ,]
May19=SHAPIRENG5YEARS[(SHAPIRENG5YEARS$Date > "2019-05-01" & SHAPIRENG5YEARS$Date < " 2019-05-30" ) ,]
June19=SHAPIRENG5YEARS[(SHAPIRENG5YEARS$Date > "2019-06-02" & SHAPIRENG5YEARS$Date < " 2019-06-30" ) ,]

Теперь я не знаю, что мне делать. Я могу взять один месяц, используя

January19sample <-January19[sample(nrow(January19), 10), ]

, но я хочу избежать этого шесть раз (один раз для каждого месяца). В идеале я хотел бы взять все значения 10 * 6 = 60 из исходного кадра больших данных.

Редактировать: Я все еще изо всех сил. Я попробовал это (это не хорошо, потому что я получаю список из 6 списков, каждый из которых имеет длину 18, а не случайные 10 пиков):

SamplesOfMonths=list(c(January19),c(February19),c(March19),c(April19),c(May19),c(June19))
TopSamples=c(1:10)
LowSamples=c(1:10)
for (i in 1:6)
{
    Changer=unlist(SamplesOfMonths[i])
    TopSamples[i]=sample(Changer, 10)[2]
    LowSamples[i]=sample(Changer, 10)[1]
    print(sample(Changer, 10))
}

1 Ответ

0 голосов
/ 13 января 2020

Вы можете использовать функцию sample() и подмножество [ в скобках.

mtcars[sample(1:nrow(mtcars), size = 10, replace = FALSE),]
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
#> Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#> Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
#> Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
#> Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
#> Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
#> Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
#> Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4

Разбито, шаг за шагом:

rows_in_data <- nrow(mtcars)
rows_in_data
#> [1] 32

# Sample from 1 to number of rows, selecting some using `size = ` argument
index_of_random_rows <- sample(1:rows_in_data, size = 10, replace = FALSE)

#use bracketted subsetting data[rows, columns]
mtcars[index_of_random_rows, ]
#>                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Ferrari Dino      19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
#> Dodge Challenger  15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
#> Chrysler Imperial 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> Maserati Bora     15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
#> Ford Pantera L    15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
#> Honda Civic       30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
#> Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#> Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1

Создано в 2020- 01-13 представьте пакет (v0.3.0)

Использование карты:

#custom function
my_samples <- function(df = mtcars, num_rows = 10){
  sample(1:nrow(df), size = num_rows)
}

purrr::map(list(mtcars, iris), my_samples)
#> [[1]]
#>  [1] 16  1  4 22 30  2 21 14 23 10
#> 
#> [[2]]
#>  [1]  73  31 112   1  43  91  87  23  19  16

Создано в 2020-01-13 по представительный пакет (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...