Как посчитать количество значений, которые удовлетворяют определенным условиям в df в R - PullRequest
0 голосов
/ 06 июня 2018

Допустим, у меня есть данные, подобные следующим

date  value location
1/1    10      A    
1/2    15      A
1/3    20      A
2/1    15      A
2/2    10      A
2/3    5       A
2/4    12      B
2/5    15      B
2/6    5       B
2/7    20      A

Я бы хотел подсчитать все значения за 10 после 1/31, сгруппированные по местоположению.Таким образом, мой вывод дал бы мне 3 для местоположения A и 2 для местоположения B. Есть идеи, как это можно реализовать в R?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

используя базу R, вы можете сделать:

newdat=subset(transform(dat,date=strptime(date,"%m/%d")),date>as.Date("2018-01-31")&value>=10)
table(newdat$location)
A B 
3 2 

или

  aggregate(value~location,newdat,length)
  location value
1        A     3
2        B     2

Принимая во внимание комментарий thelaemail, вы можете сделать:

aggregate(value~location,dat,length,subset = strptime(date,"%m/%d")>as.Date("2018-01-31")&value>=10)
  location value
1        A     3
2        B     2
0 голосов
/ 06 июня 2018

Добавление немного функциональности lubridate к ответу D.sen:

library(tidyverse)
library(lubridate)

thresh <- 10
date_thresh <- "2018-01-31"

df %>%
  mutate(date = mdy(paste0(date, "/2018"))) %>%
  filter(date > date_thresh, value > thresh) %>%
  group_by(location) %>%
  tally()

# A tibble: 2 x 2
  location     n
  <fct>    <int>
1 A            2
2 B            2
0 голосов
/ 06 июня 2018

После того, как вы стандартизировали свое поле даты (предполагая, что это 2018 год), вы можете использовать пакет dplyr, чтобы отфильтровать ваш набор данных по необходимым условиям и сгруппировать по местоположению и подсчету.

library(dplyr)

df <- df %>%
  mutate(date = as.Date(paste0(df$date, '/', format(Sys.Date(), '%Y')),
                        format = '%m/%d/%Y')) %>%
  filter(date > as.Date('2018-01-31')) %>%
  filter(value >= 10) %>%
  group_by(location) %>%
  tally()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...