R-按月过滤数据

时间:2020-07-18 17:01:59

标签: r dataset

我为我的英语不好而道歉,但我确实需要您的帮助。

我有一个.csv数据集,其中有两列-年和值。有关于1900年至2019年每月降水高度的数据。

它看起来像这样:

year    value
190001  100
190002  39
190003  78
190004  45
...
201912  25

我需要创建两个新的数据集:第一个数据集包含从7月(07)到9月(09)每年的数据,第二个数据集是从1月(01)到3月(03)的数据。

我还需要总结每年的数据(这意味着我每年只需要一个值)。

所以我有1900-2019年夏季和1900-2019年冬季的数据。

2 个答案:

答案 0 :(得分:1)

您可以使用dplyrstringr软件包来满足您的需求。我首先创建了一个模拟数据集:

library(dplyr)
library(stringr)

df <- data.frame(time = 190001:201219, value=runif(length(190001:201219), 0, 100))

之后,我们分别为月份和年份创建两个列:

df$year <- as.numeric(str_extract(df$time, "^...."))
df$month <- as.numeric(str_extract(df$time, "..$"))

此时,我们可以过滤:

df_1 <- df %>% filter(between(month,7,9))
df_2 <- df %>% filter(between(month,1,3))

...并总结:

df <- df %>% group_by(year) %>% summarise(value = sum(value))

答案 1 :(得分:0)

library(tidyverse)

dat <- tribble(
  ~year,    ~value,
  190001,  100,
  190002,  39,
  190003,  78,
  190004,  45)

将year变量拆分为month和year变量:

dat_prep <- dat %>% 
  mutate(month = str_remove(year, "^\\d{4}"), # Remove the first 4 digits
         year = str_remove(year, "\\d{2}$"), # Remove the last 2 digits
         across(everything(), as.numeric))

dat_prep %>% 
  filter(month %in% 7:9) %>% # For months Jul-Sep. Repeat with 1:3 for Jan-Mar
  group_by(year) %>% 
  summarize(value = sum(value))
相关问题