Создание массивов на основе нескольких критериев, предпочтительно в VBA, но R также является опцией - PullRequest
0 голосов
/ 07 апреля 2019

Я новичок в среде Stackoverflow и пытаюсь сортировать / создавать массивы, чтобы я мог работать с этими массивами. Я пытаюсь получить среднее и стандартное.

У меня есть набор данных почти 50 000 наблюдений.

Пример набора данных показан ниже.

| Person   | Product | Date       | Price |
|----------|---------|------------|-------|
| Chris    | Pear    | 01-02-2018 | 10    |
| Tom      | Pear    | 02-02-2018 | 11    |
| John     | Pear    | 03-02-2018 | 12    |
| Bill     | Pear    | 04-02-2018 | 13    |
| Someone  | Pear    | 05-02-2018 | 14    |
| Chris    | Pear    | 06-02-2018 | 15    |
| Tom2     | Apples  | 07-02-2018 | 16    |
| John     | Pear    | 08-02-2018 | 17    |
| Bill2    | Pear    | 09-02-2018 | 18    |
| Someone2 | Pear    | 10-02-2018 | 19    |



Mean price: 14.5
STD:3.028

То, что я хочу иметь - это массив (ДЛЯ каждой из цен), поэтому я бы знал, что означает средняя цена и стандарт. были на текущую дату. Это дало бы мне только самые последние наблюдения, основанные на критериях: человек, продукт

Таким образом, я хотел бы получить нечто подобное (для Груши) на дату 10-02-2018:

+----------+---------+------------+-------+
| Person   | Product | Date       | Price |
+----------+---------+------------+-------+
| Tom      | Pear    | 02-02-2018 | 11    |
+----------+---------+------------+-------+
| Bill     | Pear    | 04-02-2018 | 13    |
+----------+---------+------------+-------+
| Someone  | Pear    | 05-02-2018 | 14    |
+----------+---------+------------+-------+
| Chris    | Pear    | 06-02-2018 | 15    |
+----------+---------+------------+-------+
| John     | Pear    | 08-02-2018 | 17    |
+----------+---------+------------+-------+
| Bill2    | Pear    | 09-02-2018 | 18    |
+----------+---------+------------+-------+
| Someone2 | Pear    | 10-02-2018 | 19    |
+----------+---------+------------+-------+

Mean price: 15.29
Std: 2.87

Надеюсь, что некоторые смогут помочь!

Заранее большое спасибо.

1 Ответ

0 голосов
/ 07 апреля 2019

Воспроизведение ваших данных:

dat <- read.table(
  text = gsub(
    "[[:punct:]]", 
    "", 
    "| Person   | Product | Date       | Price |
     |----------|---------|------------|-------|
     | Chris    | Pear    | 01-02-2018 | 10    |
     | Tom      | Pear    | 02-02-2018 | 11    |
     | John     | Pear    | 03-02-2018 | 12    |
     | Bill     | Pear    | 04-02-2018 | 13    |
     | Someone  | Pear    | 05-02-2018 | 14    |
     | Chris    | Pear    | 06-02-2018 | 15    |
     | Tom2     | Apples  | 07-02-2018 | 16    |
     | John     | Pear    | 08-02-2018 | 17    |
     | Bill2    | Pear    | 09-02-2018 | 18    |
     | Someone2 | Pear    | 10-02-2018 | 19    |"
    ),
  header = T, colClasses = c(rep("character", 3), "integer")
) 

Очистка полученной таблицы:

library(tidyverse)
library(magrittr)

dat %<>%
  mutate_if(is.character, funs(gsub("\\s+", "", .))) %>%
  mutate(Date = as.Date(Date, "%d%m%Y"))

Отвечая на ваш вопрос:

dat %>%                                    # replace %>% with %<>% to save changes
  group_by(Person, Product) %>%            # group by Person and Product  
  filter(Date == max(Date)) %>%            # Leave only most resent records
  ungroup() %>%                            # ungroup data
  arrange(Product, Date) %>%               # sort by Product, Date
  mutate(Date = format(Date, "%d-%m-%Y"))  # output date as in desired output

# A tibble: 8 x 4
  Person   Product Date       Price
  <chr>    <chr>   <chr>      <int>
1 Tom2     Apples  07-02-2018    16
2 Tom      Pear    02-02-2018    11
3 Bill     Pear    04-02-2018    13
4 Someone  Pear    05-02-2018    14
5 Chris    Pear    06-02-2018    15
6 John     Pear    08-02-2018    17
7 Bill2    Pear    09-02-2018    18
8 Someone2 Pear    10-02-2018    19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...