基于 R 中时间点的长格式数据中的新变量

New variable in long format data based on timepoint in R

我似乎无法找到关于如何在长格式数据框中创建新的(例如)分组变量或基于 R 中某些行操作的 tibble 的答案

使用这个例子:

toosimpledataset_long <- read.table(header=TRUE, text='subject sex Timepoint measurement measurement2 
      1    M       T01         7.9          1.9       
      1    M       T02        12.3          NA
      1    M       T03        10.7          1.7
      1    M       T04         9.7          1.7
      2    F       T01         6.3          1.3
      2    F       T02        10.6          1.6
      2    F       T03        11.1           NA
      2    F       T04        12.5          1.7
      3    F       T01         5.5           NA
      3    F       T02          NA          1.1
      3    F       T03        13.8          1.8
      3    F       T04        15.7          1.7 
      4    M       T01        10.5          1.5
      4    M       T02        13.4          1.4
      4    M       T03        12.4          1.4
      4    M       T04        11.3          1.9    
                           ') 

我想创建

  1. 一个因子变量,它指示每个受试者在 T02 的值是否是例如<= 11 在 measurement 变量

  2. 和一个因子变量,它指示从 T01T04 的变化百分比是否小于 50 %

能够使用这些因子变量作为分组变量,例如为了在 ggplot 中绘图,必须在每个主题的每一行中填写值(我认为)。

因此,正确的数据集应该是这样的:

subject  sex Timepoint measurement measurement2 responder_crit responder_percentage
1          M       T01         7.9          1.9              0                    1         
1          M       T02        12.3           NA              0                    1
1          M       T03        10.7          1.7              0                    1
1          M       T04         9.7          1.7              0                    1
2          F       T01         6.3          1.3              1                    0
2          F       T02        10.6          1.6              1                    0
2          F       T03        11.1           NA              1                    0
2          F       T04        12.5          1.7              1                    0   
3          F       T01         5.5           NA              NA                   0
3          F       T02          NA          1.1              NA                   0
3          F       T03        13.8          1.8              NA                   0
3          F       T04        15.7          1.7              NA                   0    
4          M       T01        10.5          1.5              0                    1
4          M       T02        13.4          1.4              0                    1
4          M       T03        12.4          1.4              0                    1
4          M       T04        11.3          1.9              0                    1 

不确定重塑是否是执行此类操作的标准方法。不幸的是,真实的数据集非常大而且非常混乱。重塑效果不佳。

您可以在 mutate 调用中针对某些时间点进行子集化:

toosimpledataset_long %>% 
  group_by(subject) %>% 
  mutate(
    responder_crit = measurement[Timepoint == 'T02'] >= 11,
    responder_percentage = (measurement[Timepoint == 'T04'] / measurement[Timepoint == 'T01']) < 1.5
  )

我对 responder_crit 的看法不太一样,但我不明白你的示例中如何只得到一个 NA。