首页 > 解决方案 > 如何在R中其他人的条件下创建一个新变量

问题描述

我有以下数据框:

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 都有多个行/场合)

任何帮助都会很棒,特别是如果它可以做得更简单!

标签: rif-statementvariablesconditional-statements

解决方案


如果我不明白你在问什么,我想我会使用 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

推荐阅读