根据日期(以及更多)拆分、过滤和选择数据

Posted

技术标签:

【中文标题】根据日期(以及更多)拆分、过滤和选择数据【英文标题】:Splitting, Filtering and Selecting data based on date (and a bit more) 【发布时间】:2021-12-11 13:58:54 【问题描述】:

首先,一些示例数据

day <- c("2004-02-13", "2004-02-13", "2004-12-10", "2004-12-10", "2005-05-01", "2005-05-01", "2005-11-29", "2005-11-29", "2007-06-22", "2007-06-24")
test <- c('weight', 'metabolic rate', 'weight', 'metabolic rate', 'weight', 'metabolic rate', 'weight', 'metabolic rate', 'weight', 'metabolic rate')
testvalue <- c(90, 2300, 80, 2200, 100, 2500, 70, 2000, 65, 1800)
data <- data.frame(day, test, testvalue)
data$day <- as.Date(data$day) 

我有一个如下构建的数据集:真正的目标是对体重和代谢体重之间的关系进行皮尔逊相关,并要求必须在同一天进行测试。

data

我希望在同一天进行的测试能够配对。 并且必须丢弃所有独立的数据(如体重“65”和代谢率“1800”)。以下是我想要结束的(在这个例子中)。 我相信可能有一个功能可以丢弃不重复的日期,但是我仍然不知道如何分隔列。

weight <- c(90, 80, 100, 70)
metabolic_rate <-c(2300,2200,2500,2000)
end_result <- data.frame(weight, metabolic_rate)
end_result
cor.test(end_result$weight, end_result$metabolic_rate)

【问题讨论】:

【参考方案1】:

你可以试试

require(magrittr)
require(tidyr)

dt <- spread(data, key = 'test', value = 'testvalue') %>% na.omit
with(dt,
     cor.test(`metabolic rate`, `weight`)
)

在这里,您通过testday 转换数据,并通过na.omit 删除那些至少具有一个NA 值的行。

【讨论】:

感谢您的回答。我不能让它与 reshape2 一起工作。看起来它已经退役了:rdocumentation.org/packages/reshape2/versions/1.4.4 @RasmusFrosted 哇,很遗憾看到dcast 退休了。 seems thatspread 是最新的方法 @RasmusFrosted 使用 tidyr 替代编辑。【参考方案2】:

使用tidyr的替代方法:

end_result <- data |>
  tidyr::pivot_wider(names_from = test, values_from = testvalue) |>
  na.omit() 

cor.test(end_result$weight, end_result$"metabolic rate")

【讨论】:

您好,谢谢您的回答!当我将此代码应用于我的真实代码时,“体重”和“代谢率”列表只会删除所有数字并放入 代替 OR 。你知道如何解决这个问题吗? 这可能是因为数据不是一个简单的数字向量——它是一个列表吗?否则,我想不出理由。 pivot_wider() 除了重新排列数据并没有做太多事情

以上是关于根据日期(以及更多)拆分、过滤和选择数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 根据下拉选择过滤多个数据透视表

在两个日期选择器之间过滤数据表

如何根据选择的日期显示 UITableView?

MS Access 根据给定的日期范围选择查询字段

剑道网格中的日期时间过滤器

如何根据前一页选择过滤 Telerik Grid