【问题标题】:Subtracting values from a value equal to specific date从等于特定日期的值中减去值
【发布时间】:2021-03-08 20:20:27
【问题描述】:

我有一个类似于以下内容的数据集:

Date Total_Nonfarm Leisure_and_Hospitality
2020-01-01 300 50
2020-02-01 200 40
2020-03-01 100 15
2020-04-01 75 15
2020-05-01 150 10

我需要根据自 2020 年 2 月 1 日以来损失的总金额计算非农和休闲和酒店工作的每月损失(两个新列)。所以这不会影响 2020-02-01 之前的行,只会影响之后的行。

我已尝试找到一种方法来打印取决于日期等于 2020-02-01 的作业的值,但无法成功计算出来。我想也许我可以打印这个值(比如Feb2020 <- *the correct function to find that value*,然后我可以使用 dplyr 改变一个新列并执行mutate(Total_jobs_lost = Feb2020 - Total_Nonfarm。但我认为这会影响 2020-02-01 之前的行。

我希望输出看起来像这样:

Date Total_Nonfarm Leisure_and_Hospitality Total_Nonfarm_Losses LH_Losses
2020-01-01 300 50 NA NA
2020-02-01 200 40 0 0
2020-03-01 100 15 -100 -25
2020-04-01 75 15 -125 -25
2020-05-01 150 10 -50 -30

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 由于您的描述不清楚,请以表格形式添加所需的输出
  • 谢谢--已更新。

标签: r


【解决方案1】:
require(tidyverse)
require(lubridate)
(df <- read_csv2(file = "data.csv"))

df$Date <- dmy(df$Date)
df$Total_Nonfarm_Losses <- NA
df$Leisure_and_Hospitality_Losses <- NA

timepoint <- ymd("2020/02/01")
(before <- df %>% filter(Date < timepoint))
(after <- df %>% filter(Date >= timepoint))

(
  after
  %>% mutate(Feb_Nonfarm = df[df$Date == timepoint, "Total_Nonfarm"] ,
             Feb_Leisure = df[df$Date == timepoint, "Leisure_and_Hospitality"],
            Total_Nonfarm_Losses = Feb_Nonfarm - Total_Nonfarm,
            Leisure_and_Hospitality_Losses = Feb_Leisure - Leisure_and_Hospitality
             )
  %>% select(1:5)
  %>% bind_rows(before, .)
) 

还有输出:

# A tibble: 5 x 5
  Date       Total_Nonfarm Leisure_and_Hospi~ Total_Nonfarm_Losses~ Leisure_and_Hospitality_L~
  <date>             <dbl>              <dbl>                 <dbl>                      <dbl>
1 2020-01-01           300                 50                    NA                         NA
2 2020-02-01           200                 40                     0                          0
3 2020-03-01           100                 15                   100                         25
4 2020-04-01            75                 15                   125                         25
5 2020-05-01           150                 10                    50                         30

【讨论】:

    【解决方案2】:
      library(tidyverse)
    
    data <- read.delim("clipboard")
    
    data$Total_Nonfarm_Losses <- rep("NA", nrow(data))
    data$LH_Losses <- rep("NA", nrow(data))
    
    Feb2020 <- filter(data,Date == "2020-02-01")$Total_Nonfarm
    Feb2020b <- filter(data,Date == "2020-02-01")$Leisure_and_Hospitality 
    
    data[2:5,] <- data[2:5,] %>% 
      mutate(Total_Nonfarm_Losses = Total_Nonfarm- Feb2020,
             LH_Losses = Leisure_and_Hospitality - Feb2020b)
    `  
    
    
                Date Total_Nonfarm Leisure_and_Hospitality Total_Nonfarm_Losses LH_Losses
    1 2020-01-01           300                      50                   NA        NA
    2 2020-02-01           200                      40                    0         0
    3 2020-03-01           100                      15                 -100       -25
    4 2020-04-01            75                      15                 -125       -25
    5 2020-05-01           150                      10                  -50       -30
       
    

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2022-06-10
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      相关资源
      最近更新 更多