Рассчитать среднее значение на основе диапазона дат в R - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть огромная база данных, в которой есть финансовые компании. Я хочу рассчитать среднее значение столбца "LEASE_EXP" на основе указанного c диапазона дат.

Допустим, я хочу рассчитать среднее значение LEASE_EXP для всех компаний (вместе), в которых находится столбец "Bal_Stmt_Date" в период между «11.01.2008» и «31.10.2017»

Пожалуйста, помогите мне с этим. Я боролся с этим с давних пор. Я новичок в R. Data set

library(readxl)
library(zoo)
library(dplyr)
library(lubridate)

df <- read.csv("C:\\Users\\talgotra\\Desktop\\Tech Project\\OperatingLease\\finInfo_q.csv")

start = as.Date("1998-11-01")
end = as.Date("2019-10-31")

mean(subset(transform(df, Bal_Stmt_Date = as.Date(Bal_Stmt_Date, '%m/%d/%Y')), 
            Bal_Stmt_Date >= start & Bal_Stmt_Date <= end, select = LEASE_EXP)[[1]], na.rm = FALSE)

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020
library(tidyverse) # for data manipulation
library(lubridate) # for dates

df <- tribble( # create a sample dataframe
    ~Coded_Name, ~Bal_Stmt_Date, ~LEASE_EXP
    , 1, 20190304, 42
    , 1, 20190305, 42
    , 1, 20190307, 42
    , 2, 20190304, 42
    , 2, 20190305, 42
    , 3, 20190306, 42
    , 3, 20190304, 42
)

df %>% # take the dataframe
    mutate(Bal_Stmt_Date = ymd(Bal_Stmt_Date)) %>% # turn dates into dates
    mutate(timeRangeOfInterest = Bal_Stmt_Date > ymd(20190303) & # create a logical variable identifying the time range of interest
               Bal_Stmt_Date < ymd(20190306)) %>%
    filter(timeRangeOfInterest) %>% # filter out only the time range of interest
    group_by(Coded_Name) %>% # and then per company...
    summarise(sum_LEASE = sum(LEASE_EXP)) # ...calculate the sum
1 голос
/ 21 февраля 2020

В базе R вы можете сделать:

start = as.Date("2018-11-01")
end =  as.Date("2019-10-31")

mean(subset(transform(df, Bal_Stmt_Date = as.Date(Bal_Stmt_Date, '%m/%d/%Y')), 
           Bal_Stmt_Date >= start & Bal_Stmt_Date <= end, select = LEASE_EXP)[[1]], 
           na.rm = TRUE)

Или с dplyr и lubridate

library(dplyr)
library(lubridate)

df %>% 
 filter(between(mdy(Bal_Stmt_Date), start, end)) %>% 
 summarise(mean = mean(LEASE_EXP, na.rm = TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...