如何在数据框中为跨 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))]]
您可以检查每个 VARIABLE
中 STUDY
的唯一计数。
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
我想在数据集中创建一个 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))]]
您可以检查每个 VARIABLE
中 STUDY
的唯一计数。
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