【问题标题】:Calculating Conditional Standard Deviation Using Two Data tables in R使用 R 中的两个数据表计算条件标准偏差
【发布时间】:2021-08-19 15:22:48
【问题描述】:

我在 R 中有两个数据表;表 1 较小,大约有 4,000 行和 4 列。这些列是 ID、Report_Date、Start_date 和 End_date。另一个表,表 2,是一个更大的表,有数千行和 8 列。两个表都有 ID col,但这个 ID col 在两个表中可以有多个行。表 2 中还有一个日期列和一个名为“值”的列。表 2 中的其余列不适用于此任务。

对于表1中的每一行,我需要根据2个条件计算表2中col“Value”的标准偏差; 1. ID 必须匹配,2. 日期范围在表 1 中的 Start_Date 和 End_Date 定义的间隔内。如何在 R 中做到这一点?我附上了下面两张表的小样本。在下面的示例中,我需要 Start_Date 和 End_Date 中日期范围的 A1 值的标准差,因此 STD_Value(A1, report date of 2008/10/02)= sd(10,11,11)。

示例表 1 如下所示:

ID Report_Date Start_Date End_Date
A1 2008/10/02 2008/09/27 2008/09/30
A1 2008/11/02 2008/10/27 2008/10/30
A2 2008/02/02 2008/01/15 2008/01/17

示例表 2 如下所示:

ID Date Value
A1 2008/09/27 10
A1 2008/09/28 11
A1 2008/09/30 11
A1 2008/10/01 12
A1 2008/10/02 13
A2 2008/01/14 5
A2 2008/01/15 4
A2 2008/01/16 3
A2 2008/01/17 5
A2 2008/01/18 5

【问题讨论】:

  • 也许您可能想使用sqldfdata.tablefuzzy_join包并合并两个表,然后根据IDReport_Date按组计算sd。您可以看到一些基于日期范围的合并示例 herehere

标签: r conditional-statements standard-deviation


【解决方案1】:

加载所需的包

library(dplyr)
library(tidyverse)
library(fuzzyjoin)

加载我们的两个表

first.table <- read.table('Table_1.csv', header = TRUE,  sep = ',',  stringsAsFactors = FALSE)
second.table <- read.table('Table_2.csv', header = TRUE,  sep = ',',  stringsAsFactors = FALSE)

格式化使用的日期

first.table$Start_Date <- as.Date(first.table$Start_Date, "%m/%d/%y")
first.table$End_Date <- as.Date(first.table$End_Date, "%m/%d/%y")
first.table$Report_Date <- as.Date(first.table$Report_Date, "%m/%d/%y")
second.table$Date <- as.Date(second.table$Date, "%m/%d/%y")

由于存在不精确的列而模糊合并两个表

来源:https://cran.r-project.org/web/packages/fuzzyjoin/fuzzyjoin.pdf

merged.table = fuzzy_left_join(
first.table, second.table,
by = c(
    "ID" = "ID",
    "Start_Date" = "Date",
    "End_Date" = "Date"
),
match_fun = list(`==`, `<=`, `>=`))

输出结果

final.table = merged.table %>% group_by(ID.y) %>% mutate(Standard_Deviation = sd(Value, na.rm = TRUE))
write_csv(final.table, "final_table.csv")

样本输出:

See csv screenshot sample here

【讨论】:

  • 非常感谢哈迪!非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 2016-04-24
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多