如何在数据框中为跨 STUDY 的共享变量在数据集中创建 Y/N 标志

How to create a Y/N flag in a data set for shared variables across STUDY in a data frame

我想在数据集中创建一个 YES/NO 标志,这样如果 VARIABLE 列中的变量出现在每个 STUDY 中,则为 YES,否则为 NO。因此,例如,当所有研究中都存在 AGE 时,则标志应为 YES,否则为 no。

这里有一个简单的例子,但我的数据要大得多,还有其他列:

STUDY     VARIABLE
STUDY1      AGE
STUDY1      SEX
STUDY1       WT
STUDY2      AGE
STUDY2      RACE
STUDY2       WT
STUDY3      AGE
STUDY3      SEX
STUDY3       WT

输出应该是:

STUDY     VARIABLE  FLAG
STUDY1      AGE      YES
STUDY1      SEX      NO 
STUDY1       WT      YES
STUDY2      AGE      YES
STUDY2      RACE     NO
STUDY2       WT      YES
STUDY3      AGE      YES
STUDY3      SEX      NO
STUDY3       WT      YES

我如何使用“data.table”在 R 中做到这一点?

你可以试试

df[, n := (.N == 3), by = VARIABLE][, FLAG := c("YES", "NO")[match(FLAG, c(TRUE, FALSE))]]

    STUDY VARIABLE FLAG
1: STUDY1      AGE  YES
2: STUDY1      SEX   NO
3: STUDY1       WT  YES
4: STUDY2      AGE  YES
5: STUDY2     RACE   NO
6: STUDY2       WT  YES
7: STUDY3      AGE  YES
8: STUDY3      SEX   NO
9: STUDY3       WT  YES

如需通用方式,请告知(有具体情况将不胜感激)

df[, FLAG := (.N == df[,uniqueN(n = uniqueN(STUDY), STUDY)]), by = VARIABLE][, FLAG := c("YES", "NO")[match(FLAG, c(TRUE, FALSE))]]

您可以检查每个 VARIABLESTUDY 的唯一计数。

library(data.table)

setDT(df) #If needed to convert to `data.table`
df[, FLAG := ifelse(uniqueN(STUDY) == uniqueN(df$STUDY), 'YES', 'NO'), VARIABLE]
df

#    STUDY VARIABLE FLAG
#1: STUDY1      AGE  YES
#2: STUDY1      SEX   NO
#3: STUDY1       WT  YES
#4: STUDY2      AGE  YES
#5: STUDY2     RACE   NO
#6: STUDY2       WT  YES
#7: STUDY3      AGE  YES
#8: STUDY3      SEX   NO
#9: STUDY3       WT  YES