【问题标题】:Can I use R to only analyze data past a certain date?我可以使用 R 仅分析某个日期之后的数据吗?
【发布时间】:2020-02-11 09:01:49
【问题描述】:

我有一个导入到 RStudio 的 Excel 表,其中包含特定人群的每个主题的数据。每个主题都有自己的一组数据和相应的日期,但我只想查看数据并对每个主题的唯一日期过去的日期进行统计分析。

我假设我可以使用 split 函数创建较小的数据帧,每个数据帧对应于每个主题的数据帧,然后使用一些函数循环分析数据以在我创建的所有较小数据帧上运行分裂。

其中一些主题拥有超过 1000 个数据点。我的两个主要问题是:

1) 是否有一个函数可以用来分析每个受试者在每个受试者的特定唯一日期之后的数据?

2) 我上面提出的策略可行吗?

不幸的是,我在数据分析方面的经验很少,也没有广泛的计算机科学背景。谢谢你的帮助。

编辑:所以有一个关于我所说的数据类型的请求。我想知道我是否有类似的数据,我是否仍然可以使用上述策略。其中 P1 和 P2 有自己的数据集,我想在 TxDate 之后进行分析。

>data
1           Date     BMI    Glucose    Cholesterol    TxDate    
2 P1                                                  3/3/15
3           12/1/14  24     145        99  
4           3/18/15  26     123        101          
5           4/21/15  28     111        85      
6           6/2/15   25     133        90         
7          
8
9 P2                                                  4/6/16
10          1/3/16   33     145        200
11          3/30/16  31     162        178
12          5/13/16  34     190        134
13          6/12/16  34     183        168
14          7/9/16   35     200        189
15          9/10/16  31     175        190
16          11/23/17 27     121        120
17
18

【问题讨论】:

  • 当您学习了操作 data.frames 的基础知识后,在 R 中实现这项任务是微不足道的。
  • 如果我们对您的数据结构和您正在寻求实施的分析类型有更多了解,我们可以就如何开始提供更具体的指导。你能给我们提供一个minimal reproducible example吗?

标签: r dataframe date split


【解决方案1】:

以下是一些帮助您入门的建议:

1) Tidy 您的数据。为此,您可以研究修改输入数据的方法,使其看起来更像这样:

  ID     Date     BMI    Glucose    Cholesterol  TxDate    
3 P1     12/1/14  24     145        99           3/3/15
4 P1     3/18/15  26     123        101          3/3/15      
5 P1     4/21/15  28     111        85           3/3/15 
6 P1     6/2/15   25     133        90           3/3/15     
10 P2    1/3/16   33     145        200          4/6/16
11 P2    3/30/16  31     162        178          4/6/16
12 P2    5/13/16  34     190        134          4/6/16
13 P2    6/12/16  34     183        168          4/6/16
14 P2    7/9/16   35     200        189          4/6/16
15 P2    9/10/16  31     175        190          4/6/16
16 P2    11/23/17 27     121        120          4/6/16

请注意,ID 和 TxDate 列已填充适当的值,并且删除了几行。 ID、日期等行实际上是“标题”,而不是数据行。如果整理步骤比分析花费的时间更长,请不要太惊讶。

现在,出于本示例的目的,让我们将其用作您的数据:

df <- data.frame(
  ID = c(rep("P1",4), rep("P2", 7)),
  Date = as.Date(mdy(c("12/1/14", "3/18/15", "4/21/15" , "6/2/15", "1/3/16", "3/30/16", "5/13/16", "6/12/16", "7/9/16", "9/10/16", "11/23/17"))),
  BMI = c(24,26,28,25,33,31,34,34,35,31,27),
  Glucose = c(145,123,111,133,145,12,190,183,200,175,121),
  Cholesterol = c(99,101,85,90,200,178,134,168,189,190,120),
  TxDate = as.Date(mdy(c("3/3/15", "3/3/15","3/3/15","3/3/15","4/6/16", "4/6/16","4/6/16","4/6/16","4/6/16","4/6/16","4/6/16"))),
  stringsAsFactors = F)

2) 检查您的 Date 和 TxDate 列是否表示为 date 对象。如果您的 data.frame 被命名为“df”,那么 is.date(df$Date)is.date(df$TxDate) 之类的内容会告诉您。或str(df)

如果没有,请阅读有关将它们转换为 date 对象的方法,也许可以将 as.Date() 函数与 lubridate 包中的 mdy() 结合使用。

3) 将日期表示为 date 对象后,您可以使用简单的逻辑语句 subset 数据框,如下所示

# subset dataframe
df1 <- df[df$Date > df$TxDate, ] 

现在df1 应该是这样的:

   ID Date        BMI    Glucose    Cholesterol     TxDate
2  P1 2015-03-18  26     123         101            2015-03-03
3  P1 2015-04-21  28     111          85            2015-03-03
4  P1 2015-06-02  25     133          90            2015-03-03
7  P2 2016-05-13  34     190         134            2016-04-06
8  P2 2016-06-12  34     183         168            2016-04-06
9  P2 2016-07-09  35     200         189            2016-04-06
10 P2 2016-09-10  31     175         190            2016-04-06
11 P2 2017-11-23  27     121         120            2016-04-06

剩下的就是您分析所需的数据。

【讨论】:

  • 非常感谢您的帮助!我会试一试,但根据我的基本知识,这看起来绝对是解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多