r - 如何使用 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
解决方案
您可以获取长格式的数据,如果在之后返回,则可以获取每个subject
返回的数据。TRUE
any
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 中,您可以使用apply
row-wise :
df$pos_aft_neg <- apply(df, 1, function(x)
any(x[-1] == 'positive' & x[- length(x)] == 'negative'))
推荐阅读
- java - 如何使用默认的 ServerSocket 进行 TLS 握手?
- excel - 在 VBA 中使用 LEFT FIND
- c# - 如何为 html 表的日期列提供日期格式 dd/mm/yyyy
- kubernetes - Ceph RBD 实际空间使用量远大于挂载后的磁盘使用量
- javascript - 将字符串作为变量
- quartz-scheduler - Quarkus 预定记录处理机制最佳实践
- generics - 使用整数特征并执行加法运算
- css - 如何在 Ant Design-UI 中包装或截断(标签)中的长字符串
- excel - 在不同页面上将工作表导出为 PDF
- tableau-desktop - Tableau 中的折线图