问题描述
我有以下数据框:
ID Measurement A Measurement B Date of Measurements A and B Date of Measurement C
1 23 24 12 16
1 22 23 12 15
1 24 22 12 17
1 21 20 12 11
1 27 29 12 17
这是使用1个标识符(ID)的示例,实际上我有数千个。
我想创建一个封装的变量
”,如果此ID的度量A或度量B大于xxx,则在度量C日期之前两次以上,然后指定 它们在名为new_var的新列中为1。
到目前为止,我删除了所有的测量日期A和B>测量日期C
measurements <- subset(measurements,dateofmeasurementsAandB < dateofmeasurementC)
然后在ifelse语句的截止处添加
measurements$new_var<- ifelse(measurements$measurementA >= xxx | measurements$measurementB >= xxx,1,0)
但是不能考虑“多次使用”(从示例中可以看到,每个ID有多个行/场合)
任何帮助都是很好的,尤其是如果可以更简单地完成它!
解决方法
如果我不理解您的要求,我想我会使用dplyr的count函数:
#Starting from your dataframe
library(tidyverse)
df <- measurements %>%
filter(dateofmeasurementsAandB < dateofmeasurementC,measurements$measurementA >= xxx | measurements$measurementB >= xxx)
此数据框仅应具有您要满足的条件,因此现在我们对它们进行计数并过滤结果:
df <- df %>% count(ID) %>% filter(n >= 2)
向量 df $ ID 现在应该只包含已被测量多次的ID,然后您可以轻松地将其反馈到测量数据框中,但是我偏爱这个:
measurements$new_var <- 0
measurements[measurements$ID %in% df$ID]$new_var <- 1