首页 > 解决方案 > 如何使用 r 识别模式的某些变化

问题描述

我有一个数据集,每天测量相同受试者的相同血液水平。所有患者一开始都是“阳性”的,但大多数患者在某些时候变为阴性。一些在实验结束前保持阴性,而另一些在阴性后变为阳性。

我试图找出那些在消极之后转为积极的人。

尝试了 ifelse 并尝试了 dplyr 中的滞后功能,但无法到达任何地方。

这是我的数据的示例:

subject      day1      day2      day3      day4      day5      day6      day7
1       A positive  positive  positive  positive  positive  positive  positive 
2       B positive  positive   negative positive   negative  negative  negative
3       C positive  positive  positive   negative  negative positive  positive 
4       D positive  positive  positive   negative  negative  negative  negative

标签: rdplyr

解决方案


您可以获取长格式的数据,如果在之后返回,则可以获取每个subject返回的数据。TRUEany value"positive""negative"

library(dplyr)
df %>%
  tidyr::pivot_longer(cols = -subject) %>%
  group_by(subject) %>%
  summarise(pos_aft_neg = any(value == 'positive' & 
                              lag(value) == 'negative', na.rm = TRUE)) %>%
  left_join(df, 'subject')


# A tibble: 4 x 9
#  subject pos_aft_neg day1     day2     day3     day4     day5     day6     day7    
#  <chr>   <lgl>       <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>   
#1 A       FALSE       positive positive positive positive positive positive positive
#2 B       TRUE        positive positive negative positive negative negative negative
#3 C       TRUE        positive positive positive negative negative positive positive
#4 D       FALSE       positive positive positive negative negative negative negative

在基础 R 中,您可以使用applyrow-wise :

df$pos_aft_neg <- apply(df, 1, function(x) 
                      any(x[-1] == 'positive' & x[- length(x)] == 'negative'))

推荐阅读