【发布时间】:2018-08-05 09:40:51
【问题描述】:
我已经搜索了 Stack Overflow,但找不到类似的问题...如果您知道,请向我推荐。
我有一个看起来像这样的数据框“数据”,但有超过 8000 万行和数百万种 VarA 的可能性:
ID YEAR VarA
1 2014 a
1 2015 a
1 2014 b
1 2015 c
2 2014 a
2 2015 b
2 2016 c
我想创建一个标志,其中对于每个唯一 ID,我们计算一次条件 VarA。例如,如果我想标记 VarA 可能是“a”、“b”或“c”的所有实例,我希望每个唯一个体对它们计数一次:
ID YEAR VarA Flagabc
1 2014 a 1
1 2015 a 0
1 2014 b 0
1 2015 c 0
2 2014 a 1
2 2015 b 0
2 2016 c 0
我尝试先将我的数据重塑为宽格式并创建标志:
data.w <- reshape(data=data, direction="wide", idvar="ID", timevar="YEAR")
data.w$Flagabc <- data.w$VarA %in% c("a", "b", "c")
但似乎只包括每年 VarA 的第一个值,而我的数据每人每年有 1000 个 VarA。我希望我的标志为每个独特的人筛选所有可能的 VarA,并且在满足条件时只标记一次,无论按年份或按条件重复。因为还有很多不同的可能 VarA,所以我不想使用 dcast(melt 来重塑它,因为每个独特的 VarA 都有自己的列。
我想避免循环,因为我的数据集太大了...但如果归根结底是这样,希望帮助编写适当的代码。
有没有人有我可以采取的任何想法或不同的方法?
提前谢谢你。
【问题讨论】:
-
我有点不确定你的目标是什么——找出每个人至少有一次“VarA”的哪些值?标记发生的第一年的重要性体现在哪里?
-
嗨!我使用 Flagabc 的目标是查看有多少独特的个人拥有 a、b 或 c。我还需要为 VarA= d、e 或 f 等情况制作标志。无论哪一年或多少次出现相同的 VarA 值,我都希望我的 Flagabc=1 每人一次(只要 a、b 或 c 出现在该人的 VarA 中)。它与发生的第一年无关,因为它与个体 VarA 中存在的 a、b 或 c 有关。这有意义吗?
-
基于此,听起来您可以计算 ID 和 VarA 的每个组合的出现次数,而忽略年份。任何大于零的计数都意味着 ID 至少展示了 VarA 一次?或者您的意思是“Flagabc”意味着计算包含 a OR b OR c 至少一次但忽略值 d/e/f (等)的 ID?
-
我相信我正在寻找后者。最终,使用 Flagabc,我想计算在数百万个不同的 VarA 中有多少个唯一 ID 具有 a、b 或 c。
标签: r variables conditional unique